java - 如何在java中读取,然后逐块写入一个大文件
问题描述
我有一个100mb 的大文件要读写。
String fromFile1 = "file1.zip"; // 100mb file
String toFile2 = "file2.crypt"; // empty
In a loop
1. String chunk1 = fromFile1.read("50kb"); // I read in every loop 50kb
2. toFile2.write(chunk1); // I write in every loop 50kb
循环结束后,所有内容从 传输file1.zip
到file2.crypt
。
Here by this concept I can avoid reading the entire file into memory
我怎样才能在java中最有效地做到这一点?
解决方案
我有一个大文件
用于Files.newInputStream
获取流,它不会将整个内容读入内存,因此适用于任意大小的文件。输出也是如此:获取一个OutputStream
. 例如与java.nio.file.Files.newOutputStream
.
被加密
将输入流或输出流包装在相应配置的加密过滤器流中(使用适当的密钥),然后使用in.transferTo(out)
它将导致整个流复制自身,加密,没有“内存泄漏”,到输出流中。
所以我需要以大块的base64字符串来阅读它
只有手动可怕的加密货币才能以这种方式工作,所以,不,你不需要这个。
推荐阅读
- sql-server - 在 sql server 2012 中加入 3 个表给了我重复的记录
- excel - 不允许使用 Intersect 方法的空单元格
- arduino - 是否有工具或方法可以在不直接使用 arduino IDE 的情况下上传 arduino 草图?
- python - 如何通过 boto3 获取 AWS 的配额?
- python-3.x - 如何在 Python 中使用自定义名称创建 NamedTemporaryFile?
- javascript - JavaScript:根据“外部”参数对数组进行排序
- reactjs - 出现错误:无法在模拟器中运行 EXGL
- regex - 如何使用正则表达式创建索引显示所有字段
- azure-devops - Invoke-RestMethod : 远程服务器返回错误: (401) Unauthorized
- angular - 令牌拦截器中来自firebase用户的令牌?