ZLIB输入流的意外结束



我试图用DeflaterOutputStream将JSON字符串往返到字节数组,但下面的代码抛出java.io.EOFException: Unexpected end of ZLIB input stream .

当您将字符串替换为"Hello world"或从下面的字符串中删除几个字符时,它可以工作。

任何想法?

public static void main(String[] args) throws IOException {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    DeflaterOutputStream deflate = new DeflaterOutputStream(bytes, new Deflater(Deflater.BEST_COMPRESSION, true));
    OutputStreamWriter writer = new OutputStreamWriter(deflate);
    writer.write("[1,null,null,"a",null,null,null,null,[1,null,null,null,null,null,null,null,null,null,null,null,null,0.0,0.0,null,null]");
    writer.flush();
    writer.close();
    InflaterInputStream inflaterIn = new InflaterInputStream(new ByteArrayInputStream(bytes.toByteArray()), new Inflater(true));
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inflaterIn));
    System.out.println(bufferedReader.readLine());
}

Java版本(OSX):

java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03-383-11A511)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-383, mixed mode)

我有这个问题,这是因为我没有正确地关闭我的输出流。

我认为这与您在DeflaterInflater中传递"true"的"no-wrap"选项有关。将这两个设置为false可以解决问题-尽管我建议将这两个地方的字符串编码设置为(例如UTF-8),而不是使用系统默认编码。

"nowrap"的文档是相当模糊的,但他们说:

注意:当使用'nowrap'选项时,还需要提供额外的"dummy"字节作为输入。为了支持某些优化,这是ZLIB本地库所需要的。

假设这个虚拟输入字节丢失了,尽管它没有解释它应该去哪里…

我也有这个问题,我所做的就是清理我的项目:Build> clean project

我也遇到了同样的问题。之所以会发生这种情况,是因为反应是分块的。我通过添加右标题来修复它。

HttpHeaders.ACCEPT_ENCODING,"deflate"

相关内容

  • 没有找到相关文章

最新更新