java - 附加代码抛出 java.util.zip.ZipException : incorrect data check for given . dat 文件

标签 java inputstream zlib

我有一个使用 flate 编码的 dat 文件。 我正在尝试使用基于 ZLib 库的 InflateInputStream 解码该文件。 但使用下面的示例给了我

     Exception in thread "main" java.util.zip.ZipException: incorrect data check

.dat 文件被保留 here

代码:-

    int buflength = 1;
    byte[] buf = new byte[buflength];
    FileInputStream is = new FileInputStream(new File(INPUT_DIRECTORY + INPUT_FILE));
    Inflater decompresser = new Inflater();
    //decompresser.setInput(buf);
    InflaterInputStream ifis = new InflaterInputStream(is,decompresser,buflength);



    FileOutputStream os = new FileOutputStream(new File(OUTPUT_DIRECTORY + OUTPUT_FILE));
    /*Deflater compressor = new Deflater();
    DeflaterOutputStream dfos = new DeflaterOutputStream(os, compressor, buflength);
    */

    int counter = 0;
    //long bytesToCopy = 40000;
    int bytesThisRead = 0;
    long bytesCopied = 0;

    while ((bytesThisRead = ifis.read(buf, 0, buf.length)) != -1) 
    {
        os.write(buf, 0, bytesThisRead);
        System.out.println((counter++) + " " + bytesThisRead);

        //bytesToCopy -= bytesThisRead;
        bytesCopied += bytesThisRead;
    }

我尝试调试 InflatterInputStream 库中的代码,在那里我发现读取原始数据流中的最后一个字节存在一些问题。 (将 buf 大小保持为 1,然后在最后一个字节后出现错误)

在此数据文件中,原始流的大小为 11005,而解码流的大小为 36963。

那么如何解决最后一个字节损坏的问题?

最佳答案

无论谁制作了 zlib 流 (UL_obj_11_0_raw.dat),都没有制作 zlib 流。最后的 Adler-32 检查应该以大端顺序存储,但他们以错误的小端顺序存储了正确的校验值。

关于java - 附加代码抛出 java.util.zip.ZipException : incorrect data check for given . dat 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33348192/

相关文章:

java - 执行器框架在性能测试中增加了大量时间?

java - 需要一种更好的方法从文本文件中读取和存储值

Node.js:zlib.gzipSync()

c++ - 没有找到所需的 Zlib 库

c++ - 如何使用 Cmake 编译 Zlib 源代码

java - 错误: incompatible types (for sets)

java - 如何在Java中unpickle文件?

java - 如何在已在 Final 中声明的枚举对象中添加项目并压缩到 jar

java - 在Java中将网页内容读入字符串的最佳方法是什么?

java - 如果我在 Java 中使用 BufferedReader 进行流式传输,是否存在资源泄漏