java - 在用 Java 读入时如何将输入流通过管道传输到压缩文件?

标签 java zip inputstream

我想执行一个程序,当它运行时读入它的输出并将输出输出到一个压缩文件中。该程序的输出可能非常大,所以我的想法是不要在内存中保留太多 - 只是在我得到它时将其发送到 zip。

最佳答案

ZipOutputStream targetStream = new ZipOutputStream(fileToSaveTo);
ZipEntry entry = new ZipEntry(nameOfFileInZipFile);
targetStream.putNextEntry(entry);

byte[] dataBlock = new byte[1024];
int count = inputStream.read(dataBlock, 0, 1024);
while (count != -1) {
    targetStream.write(dataBlock, 0, count);
    count = inputStream.read(dataBlock, 0, 1024);
}

换句话说:

  1. 您创建一个 ZipOutputStream,为其提供您要写入的文件。
  2. 您创建了一个 ZipEntry,它构成了该 zip 文件中的一个文件。 即当您打开 myFile.zip 时,里面有 3 个文件,每个文件都是一个 ZipEntry

  3. 您将 ZipEntry 放入您的 ZipOutputStream

  4. 创建一个字节缓冲区以将数据读入。
  5. 从您的 inputStream 读取到您的字节缓冲区,并记住计数。
  6. count 不是 -1 时,将该字节 byffer 写入您的 zipStream
  7. 阅读下一行。

完成后关闭流。将其包装在您认为合适的方法中。

关于java - 在用 Java 读入时如何将输入流通过管道传输到压缩文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/137645/

相关文章:

java - HttpUrlConnection 读取输入流 - 不同的输出结果

java - 输入流的skip方法总是返回0

java - 连接到 SQLite 数据库失败

java - 通过准备好的语句设置 RAW 数据类型

python - 我无法删除刚从 python 中的 zip 文件中提取的文件夹

ruby-on-rails - 压缩存储在 S3 上的所有回形针附件

java - 读取文件时遇到问题,程序看起来不错,但不明白为什么它输出 null

java - 使用 PDFBox 2.x 从 PDF 中提取文本时出现合并行问题

java - fragment 设置工具栏标题,但显示下一个 fragment 标题

c# - 如何从 MemoryStream 重新创建 Zip 文件