[英]Unexpected end of ZLIB input stream
我正在尝试使用 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)
我遇到了这个问题,这是因为我没有正确关闭我的输出流。
我相信这与您在Deflater
和Inflater
中都传递“true”的“no-wrap”选项有关。 将这两个都设置为false
解决问题——尽管我建议将两个地方的字符串编码设置为(例如,设置为 UTF-8)而不是使用系统默认编码。
“nowrap”的文档相当模糊,但它们指出:
注意:当使用 'nowrap' 选项时,还需要提供一个额外的“虚拟”字节作为输入。 这是 ZLIB 本机库所必需的,以支持某些优化。
大概这个虚拟输入字节丢失了,虽然它没有解释它应该去哪里......
我也有这个问题,我所做的是清理我的项目:Build > Clean Project
我有同样的问题。 这是因为响应被分块了。 我通过添加正确的标题来修复它。
HttpHeaders.ACCEPT_ENCODING,"deflate"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.