首页 > 解决方案 > 如何在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.zipfile2.crypt

Here by this concept I can avoid reading the entire file into memory

我怎样才能在java中最有效地做到这一点?

标签: javaperformancejava-streamjava-io

解决方案


我有一个大文件

用于Files.newInputStream获取流,它不会将整个内容读入内存,因此适用于任意大小的文件。输出也是如此:获取一个OutputStream. 例如与java.nio.file.Files.newOutputStream.

被加密

将输入流或输出流包装在相应配置的加密过滤器流中(使用适当的密钥),然后使用in.transferTo(out)它将导致整个流复制自身,加密,没有“内存泄漏”,到输出流中。

所以我需要以大块的base64字符串来阅读它

只有手动可怕的加密货币才能以这种方式工作,所以,不,你不需要这个。

这是一个例子


推荐阅读