2017-05-05 12 views
1

は、サンプルコードのでGZIPOutputStreamに続いてByteArrayOutputStreamをリセットしても安全ですか?ここで

ByteArrayOutputStream baos = new ByteArrayOutputStream(bufSize); 
GZIPOutputStream gzos = new GZIPOutputStream1(baos); 
gzos.write(...) 
... 
gzos.write(...) 
... 
// Would the content get flushed properly? 
gzos.flush() 
byte[] bytes = baos.toByteArray(); 
// Use bytes wherever you want 
... 
// Would this reset things for gzos? 
baos.reset() 
gzos.write(...) 
... 
gzos.write(...) 
... 
bytes = baos.toByteArray(); 
... 

で圧縮されたバイト配列がどこかで使用された後、私はストリームをリセットしたいです。私は2つの懸念があります。 GZIPOutputStreamのflushメソッドは、必ずしも常に内容をフラッシュするとは限りません。 Java 7のそれは本当ですか?それがうまくいけば、GZIPOutputStreamオブジェクトのものをリセットするのに十分なだけByteArrayOutputStreamオブジェクトのリセットを呼び出していますか?

答えて

1

GZIPOutputStreamのflushメソッドは必ずしもコンテンツを必ずしもフラッシュするとは限りません。

どのようなGZIPOutputStreamコンストラクタを使用するかによって異なります。 trueboolean syncFlushを渡すコンプレッサーを作成すると、flush()コールはそれぞれコンプレッサーと出力ストリームの両方をフラッシュします。 falseの場合、出力stremだけがフラッシュされます。

これはJava 7でも当てはまりますか?

この動作はJava 6で発生しました。このsyncFlushパラメータは、Java 7以降で使用できます。もちろん、Java 8でも使用できます。

GZIPOutputStreamオブジェクトのリセットに十分なだけByteArrayOutputStreamオブジェクトのリセットを呼び出していますか?

はい、そうです。

+0

非常に役に立ちます。ありがとう! – pythonic

関連する問題