gpt4 book ai didi

java - 从 InflaterInputStream 读取数据而不膨胀

转载 作者:行者123 更新时间:2023-12-02 04:14:09 29 4
gpt4 key购买 nike

我有一个扁平编码的数据流。Adler-32 检查要求数据采用 Big-Endian 形式,而我拥有的数据流采用 Little Endian 形式。

我尝试使用 Google-Guava 的 API

 byte[] filedata=ByteStreams.toByteArray(inflaterInputStream);

因为我需要字节操作,以防数据采用小端格式。但是在将数据转换为字节数组期间,流会膨胀。因此会抛出“数据检查错误”。

那么我如何从 InflaterInputstream 读取数据而不膨胀数据,然后在膨胀之前对其进行修改,以便 Adler-32 检查通过,否则会引发数据完整性检查。

我有类似的问题here马克·阿德勒对此做出了回应,但我现在陷入了上述问题。

编辑:inflaterInputStream 是这样创建的:

int buflength = 4096; 
byte[] buf = new byte[buflength];
FileInputStream is = new FileInputStream(new File(filePath));
Inflater decompresser = new Inflater();
InflaterInputStream inflatterInputStream = new InflaterInputStream(is,decompresser,buflength);

最佳答案

来自question that you link to ,我知道您实际上有不同的问题。您在那里声明 Adler 32 校验和采用小端顺序,但应该采用大端顺序。您还声明您已经设法反转校验和的字节顺序,并且这对于大多数文件都可以正常工作。也就是说,您已经解决了此处描述的问题。但您仍然有一些文件的校验和完全不正确。

我同意马克·阿德勒本人在对该问题的评论中给出的建议:

You need to tell whoever that .dat file came from that it is wrong.

和:

You could ignore the error and hope for the best. When the Adler-32 check does not match, either the data is wrong, the Adler-32 check is wrong, or both. There is no way to know which.

关于java - 从 InflaterInputStream 读取数据而不膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33496869/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com