我有一个扁平编码的数据流。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检查错误或两者兼有。没有办法知道是哪一个。