【问题标题】:How to read, then write chunk by chunk a large file in java [closed]如何在java中读取,然后逐块写入一个大文件[关闭]
【发布时间】:2020-12-14 16:35:36
【问题描述】:

我有一个 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 中最有效地做到这一点?

【问题讨论】:

  • 将 CipherOutputStream 与缓冲流结合使用 - 这样可以减少内存使用量。
  • 为什么chunk1String

标签: java performance java-stream java-io


【解决方案1】:

我有一个大文件

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

被加密

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

所以我需要以 base64 字符串块的形式读取它

只有手动可怕的加密才能这样工作,所以,不,你不需要这个。

Here is an example.

【讨论】:

  • 非常感谢,我无法导入newInputStream和newOutputStream
  • 我试过这个例子,但这里我需要将所有内容传递给encrypt函数,因为这里我没有任何String内容,我只有一个100mb的文件
  • 他们在java.nio.files.Files。如果您的加密方法只能加密“整个字符串”,那么您显然不能使用此方法。按照最后的链接,这就是你的加密方式。你现在拥有的任何东西都可能毫无用处。
  • 请再看看现在简化的问题
  • 我的回答和以前一样好。我不知道你的挂断是什么 - “这里是一个例子”链接正是你想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
相关资源
最近更新 更多