在上周工作中,碰到了一个关于CRC32校验的问题。如果不明白CRC校验是什么的童鞋可以上网搜搜。
客户让我解析一个二进制文件,它给我的文件是在实机中(linux)下导出的文件,而我们开发是在windows下开发的,大体给大家介绍下这个文件的的结构
简单的就是这样,其实乱七八糟的有上百个片段内容,现在我们要分析的就是头信息中的CRC值和文件内容中part0,part1......一直到partN计算得出的CRC的值进行比较。据客户说,他们从实机导出的数据,计算CRC32值是通过调用zlib中libz.so库的crc32()函数得到的。我想,现在java中有java.util.zip.CRC32类,直接处理就行了,应该满简单的。于是简单构想了下,如何更好的解析文件,在以后文件做出改动或者扩展的时候能够方便维护。想好了之后开工了。
当C头信息的CRC的值解析出来的时候,和文件内容计算出来的CRC的值,怎么也不一样,我就奇怪了,简单的看了下CRC32类的源码,
package java.util.zip;
/**
* A class that can be used to compute the CRC-32 of a data stream.
*
* @see Checksum
* @version 1.32, 11/17/05
* @author David Connelly
*/
public
class CRC32 implements Checksum {
private int crc;
/**
* Creates a new CRC32 object.
*/
public CRC32() {
}
/**
* Updates CRC-32 with specified byte.
*/
public void update(int b) {
crc = update(crc, b);
}
/**