Java gzip - GZIPOutputStream没有任意关闭/压缩

时间:2015-10-27 13:35:01

标签: java gzip gzipoutputstream

this thread的帮助下,我能够编写decompress()compress()函数。我的程序以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
------------------------------------

之后,没有任何反应。任何有关此问题的帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您使用GZIP流可能没有错;而是你使用Piped流的方式。这些用于非线性通信,并在您按照自己的方式使用时阻止。

而是使用ByteArrayOutptuStream来捕获输出。