当前位置: 首页 > 面试题库 >

异常:ZLIB输入流的意外结束

宰父宾实
2023-03-14
问题内容

有什么问题GZIPInputStreamGZIPOutputStream。请阅读以下代码(或运行它,看看会发生什么):

def main(a: Array[String]) {
    val name = "test.dat"
    new GZIPOutputStream(new FileOutputStream(name)).write(10)
    println(new GZIPInputStream(new FileInputStream(name)).read())
}

它创建一个文件test.dat10通过GZIP 写入单个字节格式,并以相同html" target="_blank">格式读取同一文件中的字节。

这就是我运行的内容:

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());
    }
}

(我没有正确实现资源管理。不要将其视为“良好代码”的示例。)



 类似资料:
  • 我试图读取字节数组的内容创建gzip一个对象,但是当我试图解压缩字节数组的内容我得到一个错误声明:java.io.EOFException:意外结束ZLIB输入流 我试图使用java的try with resources习惯用法来管理流资源,同时压缩和解压缩一个对象,但是如果我将ByteArrayOutputStream添加到try with resources块中,另一个流ObjectOutpu

  • 问题内容: 我正在使用fetch()从api服务器获取数据。我的错误如下所示: 你能告诉我我在做什么错。 问题答案: 一种用于响应请求到跨源资源具有“不透明”的响应类型。如果在尝试将响应转换为JSON之前记录响应,您将看到一种“不透明”的类型。 不透明类型被列为“严重受限”。 不透明的已过滤响应是已过滤的响应,其类型为“不透明”,URL列表为空列表,状态为0,状态消息为空字节序列,标头列表为空,主

  • 我使用fetch()从api服务器获取数据。我的错误是这样的: 你能告诉我我做错了什么吗。

  • 问题内容: 我是Hibernate的新手。 我有一个POJO,其中包含一个标签。标签包含在该表的另一个数据库表中,因此我进行了连接以填充pojo。 我正在尝试从我的《 Java Persistance with Hibernate》一书中运行一个简单的示例查询。只是出于某种原因,我得到了 是什么导致此问题? 这是我的POJO: 问题答案: 对于基元集合,应使用HQL查询,如下所示: PS:因为“标

  • 我得到了的意外结束。代码对我来说很好,我错过了什么? 安慰:

  • [`const express=require('express');const app=express();const https=require('https'); 常量url=“https://api.thevirustracker.com/free-api?countrytimeline=US”; app.get(“/”,(req,res)=>{res.send(“server is ru