java – 异常:ZLIB输入流意外结束
发布时间:2020-05-25 02:57:51 所属栏目:Java 来源:互联网
导读:GZIPInputStream或GZIPOutputStream有问题.请阅读以下代码(或运行它,看看会发生什么): def main(a: Array[String]) { val name = test.dat new GZIPOutputStream(new FileOutputStream(name)).write(10) println(new GZIPInp
|
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,由GZIP写入一个单字节10格式,并以相同的格式读取同一个文件中的字节. 这就是我运行它: 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)
由于某种原因,阅读线似乎错了. 我google错误的ZLIB输入流的意外结束,并发现了一些关于2007年至2010年发布的Oracle的错误报告.所以我猜这个错误仍然在某种程度上,但是我不知道我的代码是否正确,所以让我在这里发贴,听你的意见.谢谢! 解决方法您必须在GZIPOutputStream之前调用close(),然后再尝试读取它.该文件的最终字节将仅在文件实际关闭时被写入. (这与输出堆栈中的任何显式缓冲无关,只有当你告诉它关闭时,流只能压缩和写入最后一个字节.flush()可能不会帮助…虽然调用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());
}
}
(我没有正确地实施资源管理,不要将其视为“好的代码”的例子.) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Android 再按一次退出应用的代码
- 详解mybatis中association和collection的column传入多个参数
- 使用SpringMVC上传文件
- 以编程方式编写gui,或使用高级gui编辑器(Java Swing)?
- Log4j按级别输出日志到不同文件的实现方法
- java – getGeneratedKeys()在PreparedStatement.executeBa
- 将Java中的转换日期转换为整数然后转换为Delphi时间
- java – a4j:commandLink在reRender之后停止工作
- android中使用afinal一行代码显示网络图片
- 使用JPA EmbeddedId和Hibernate,“不知道是否传递了类名…是
