あなたが書いているストリームを解凍する方法を知っている人はいますか?私はディスクにファイルを書き込むことを避けようとしており、ストリームに書き込むときにデータを圧縮できるかどうか疑問に思っていました。ファイルへの書き込み中にファイルを圧縮する方法は?
これの背後にあるユースケースは、rawファイルが非常に大きくなり、解凍されたもの全体をディスクに書き込まなくてもいいということです。
あなたが書いているストリームを解凍する方法を知っている人はいますか?私はディスクにファイルを書き込むことを避けようとしており、ストリームに書き込むときにデータを圧縮できるかどうか疑問に思っていました。ファイルへの書き込み中にファイルを圧縮する方法は?
これの背後にあるユースケースは、rawファイルが非常に大きくなり、解凍されたもの全体をディスクに書き込まなくてもいいということです。
ZipOutputStreamに興味があると思います。あなたはそのストリームに書き込み、それをzipファイルに書き出すことができます。
working with compressed (zipped) files in Javaのチュートリアルもご覧ください。このチュートリアルのスニペットを参考にしてください:
BufferedInputStream origin = null;
FileOutputStream dest = new
FileOutputStream("c:\\zip\\myfigs.zip");
ZipOutputStream out = new ZipOutputStream(new
BufferedOutputStream(dest));
//out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = new byte[BUFFER];
// get a list of files from current directory
File f = new File(".");
String files[] = f.list();
for (int i=0; i<files.length; i++) {
System.out.println("Adding: "+files[i]);
FileInputStream fi = new
FileInputStream(files[i]);
origin = new
BufferedInputStream(fi, BUFFER);
ZipEntry entry = new ZipEntry(files[i]);
out.putNextEntry(entry);
int count;
while((count = origin.read(data, 0,
BUFFER)) != -1) {
out.write(data, 0, count);
}
origin.close();
}
out.close();
ZipOutputStream
(またはGZIPOutputStream
)に別のOutputStream
をラップし、ZipOutputStream
の書き込みメソッドを呼び出します。
私はこれをウェブアプリケーションでこれまでに行っています。サーブレットのOutputStreamへの参照を取得し、それをZipOutputStream
に提供しました。それから私はちょうど圧縮した。圧縮されたファイルは、クライアントブラウザまで提供されました。簡単です。これは、一般的にフィルタを使用してWebアプリケーションのために行われる
私はこの例を見てきた、そしてそれは私が探していたものだったとは思いませんでした。ちょっとびっくりした後、ついにそれが何をするのか理解しています。違いは、私が実際にファイルを繰り返し実行しないということだけです。私はちょうどzipファイルに新しいエントリを作成し、私は現在このエントリにファイルに書いているものを書きます。 – Andrei
@ Andrei--ええ、あなたのzipファイルに複数のファイルが含まれている必要はありません。これはうれしい! – pkaeding