crc校验是基于java校验流的(checked stream),下面举一个例子:
import java.io.*;
import java.util.zip.*;public class Test
{
public static void main(String args[])
{
try
{
int c=0;
long crc=0;

CRC32 CRCout=new CRC32();//定义一校验对象
FileInputStream fis=new FileInputStream("Your Source File");
FileOutputStream fos=new FileOutputStream("Your Destination File");

FileOutputStream fosCrc=new FileOutputStream("Save the crc.dat file");
CheckedOutputStream cos=new CheckedOutputStream(fos,CRCout);//由checkedoutputstream的构造方法构造校验流
DataOutputStream dos=new DataOutputStream(fosCrc);

while((c=fis.read()!=-1)
{
cos.write(c);
}

crc=cos.getChecksum().getValue();//返回校验值给crc
dos.writeLong(crc);//将校验值写入dos流所指文件

fis.close();
fos.close();
fosCrc.close();
cos.close();
dos.close();
}
catch(Exception e)
{}
}
}接下来,在接受处你取出文件利用CheckedInputStream读入后同样用getValue()取得校验值,将该值与dos所指文件中记录的crc值比较,若相同,则文件在传输过程中未出错。
以上只是我个人的一点学习所得,希望对你有所帮助,谢谢。

解决方案 »

  1.   

    你的意思是: 先有了一个A文件,得到他的校验值,然后再到接文件的地方,再取得他的校验值,比较两者是否相同,然后知道他是否正确是吧?
    可是我如果在SOCKET程序中,经常会传送一些数据,这些数据虽然有固定格式,但是具体是什么数据事先是无法知道的,那么我也就没法拿出一个值来和现在的数据进行比较看是不是一样了啊。
    那该怎么比较才对?请教。
      

  2.   

    哦,是不是应该发送方来发给我一个正确的CRC值,然后我再算一个CRC值,然后