当用Java读取压缩文件时,如何将输入流传递给压缩文件?

时间:2020-03-06 14:45:51  来源:igfitidea点击:

我想执行一个程序,当它运行时,读取它的输出并将其输出到一个压缩文件中。程序的输出可能会很大,所以想法是不要在内存中容纳太多内存,而只是在我收到它时将其发送到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);
}

换一种说法:

  • 我们创建一个ZipOutputStream,为其提供要写入的文件。
  • 我们创建一个ZipEntry,它构成该zip文件中的一个文件。即,当我们打开myFile.zip时,其中有3个文件,每个文件都是一个ZipEntry。
  • 我们将zipEntry放入ZipOutputStream
  • 创建一个字节缓冲区以读取数据。
  • 从inputStream读取到字节缓冲区,并记住计数。
  • 当计数不为-1时,将该字节byffer写入zipStream。
  • 阅读下一行。

完成后,关闭流。将其包裹在我们认为合适的方法中。