2017-05-05 24 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(); 
... 

所以,一旦被壓縮的字節數組某處使用的,我想重置流。我有兩個問題。我在某處讀到GZIPOutputStream的沖洗方法不一定總是沖洗內容?對於Java 7,這仍然是真的嗎?如果這樣的話,正在調用ByteArrayOutputStream對象的重置足以重置GZIPOutputStream對象的東西?

回答

1

我在某處讀到GZIPOutputStream的flush方法不一定總是刷新內容嗎?

這取決於你使用什麼GZIPOutputStream構造函數。如果您創建的壓縮機通過trueboolean syncFlush,則任何flush()調用將分別刷新壓縮機和輸出流。如果false,只有輸出strem會刷新。

這對Java 7來說還是真的嗎?

您描述的行爲發生在Java 6中。這個syncFlush參數自Java 7起可用。它當然是在Java 8中。

如果有效,是否調用ByteArrayOutputStream對象的重置足以重置對象GZIPOutputStream的東西?

是的,似乎是這樣。

+0

非常有幫助。謝謝! – pythonic

相關問題