异常:ZLIB输入流的意外结束
有什么问题GZIPInputStream
或GZIPOutputStream
。请阅读以下代码(或运行它,看看会发生什么):
def main(a: Array[String]) { val name = "test.dat"
new GZIPOutputStream(new FileOutputStream(name)).write(10)
println(new GZIPInputStream(new FileInputStream(name)).read())
}
它创建一个文件test.dat
,10
通过GZIP 写入单个字节格式,并以相同格式读取同一文件中的字节。
这就是我运行的内容:
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream at java.util.zip.InflaterInputStream.fill(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at java.util.zip.GZIPInputStream.read(Unknown Source)
at java.util.zip.InflaterInputStream.read(Unknown Source)
at nbt.Test$.main(Test.scala:13)
at nbt.Test.main(Test.scala)
由于某些原因,阅读线似乎走错了路。
我搜索了该错误,Unexpected end of ZLIB input
stream并发现了一些有关Oracle的错误报告,这些错误报告是在2007-2010年间发布的。因此,我认为该错误仍然存在,但是我不确定我的代码是否正确,因此让我在此处发布并听取您的建议。谢谢!
回答:
您必须先呼叫close()
,GZIPOutputStream
然后再尝试阅读。文件的最后字节将仅在文件实际关闭时写入。(这与输出堆栈中的任何显式缓冲flush()
无关。当您告诉它关闭时,流仅知道压缩并写入最后一个字节。A
可能无济于事,尽管调用finish()
而不是close()
应该起作用。 javadocs。)
这是正确的代码(在Java中);
package test;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
public class GZipTest {
public static void main(String[] args) throws FileNotFoundException, IOException {
String name = "/tmp/test";
GZIPOutputStream gz = new GZIPOutputStream(new FileOutputStream(name));
gz.write(10);
gz.close();
System.out.println(new GZIPInputStream(new FileInputStream(name)).read());
}
}
(我没有正确实现资源管理。不要将其视为“良好代码”的示例。)
以上是 异常:ZLIB输入流的意外结束 的全部内容, 来源链接: utcz.com/qa/423180.html