在不充气的情况下从充气器输入流读取数据



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

我试着使用谷歌的API

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

因为我需要字节操作,以防数据是little-endian格式。但在将数据转换为字节数组的过程中,流会膨胀。因此,抛出了"不正确的数据检查"。

那么,我如何在不膨胀数据的情况下从充气输入流中读取数据,然后在膨胀之前对其进行修改,以便Adler-32检查通过,否则它将抛出数据完整性检查。

我在这里有一个类似的问题,Mark Adler已经回答了,但我现在陷入了上述问题。

编辑: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);

从您链接到的问题中,我了解到您实际上有一个不同的问题。在这里,您声明Adler32校验和是按照小端顺序的,但应该是按照大端顺序的。您还声明,您已经成功地反转了校验和的字节序,并且这对大多数文件都很有效。也就是说,您已经解决了您在此处描述的问题。但是您仍然有一些文件的校验和完全不正确。

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

你需要告诉.dat文件的来源,它是错误的。

和:

你可以忽略这个错误,抱着最好的希望。当Adler-32检查不匹配,要么是数据错误,要么是Adler-32检查错误或两者兼有。没有办法知道是哪一个。

相关内容

  • 没有找到相关文章

最新更新