Javaで読み込まれた入力ストリームを圧縮ファイルにパイプするにはどうすればよいですか?
-
02-07-2019 - |
質問
プログラムを実行したいのですが、実行中にその出力を読み取り、パイプで圧縮して出力します。プログラムの出力は非常に大きくなる可能性があるので、アイデアはメモリに多く保持しすぎないようにすることです-入手したときに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ではありませんが、そのバイトバイトをzipStreamに書き込みます。
- 次の行を読みます。
完了したら、ストリームを閉じます。適切な方法でメソッドにラップします。
所属していません StackOverflow