0
在this thread的幫助下,我能夠編寫decompress()
和compress()
函數。我的程序以gzip形式接收數據,膨脹它,有時修改它,然後再次壓縮併發送它。經過數小時的頭痛和錯誤追蹤,我能夠發現有時(!),我使用的GZIPOutputStream
只是不能正常關閉。我能夠沖洗它,但之後,沒有任何反應。然而,在其他時候,它只是工作>。>Java gzip - GZIPOutputStream沒有任意關閉/壓縮
這是我的compress()
方法的代碼。
public static byte[] compress(String data) throws IOException {
try (PipedInputStream pipedIn = new PipedInputStream();
GZIPOutputStream compressor= new GZIPOutputStream(new PipedOutputStream(pipedIn))) {
compressor.write(data.getBytes("UTF-8"));
compressor.flush();
compressor.close();
// Sometimes does not reach this point.
return IOUtils.toByteArray(pipedIn);
}
}
爲了調試的目的,我添加了一些System.Outs。控制檯輸出如下:
------------------------------------
Decompressing ...
compressed byte count: 628
uncompressed byte count: 1072
------------------------------------
Compressing ...
uncompressed byte count: 1072
compressed byte count: 628
------------------------------------
>>> That worked!
------------------------------------
Decompressing ...
compressed byte count: 526
uncompressed byte count: 2629
------------------------------------
uncompressed byte count: 2629
compressed byte count: 526
------------------------------------
>>> That worked!
------------------------------------
Decompressing ...
compressed byte count: 1888
uncompressed byte count: 6254
------------------------------------
之後,沒有任何反應。任何有關這個問題的幫助將不勝感激!
你能舉個簡單的例子來說明怎麼做嗎?我想首先這樣做,但我不知道如何從'OutputStream'中將數據獲取到'InputStream'中。 *編輯:如果所有失敗,我會打開另一個線程來管信息。 – dadoosh
['ByteArrayOutputStream#toByteArray()'](http://docs.oracle.com/javase/7/docs/api/java/io/ByteArrayOutputStream.html#toByteArray())是您所需要的。 –
非常感謝!像現在的魅力一樣工作:) – dadoosh