CrcStream流校验和计算器






4.66/5 (21投票s)
通过在下载时实时计算 CRC,可以更有效地利用时间。
引言
循环冗余校验 (CRC) 常用于确认文件在下载过程中是否损坏。虽然很方便,但检查需要一些时间来读取磁盘上的数据。如果在下载过程中实时检查 CRC,这样可以避免浪费空闲 CPU 时间和磁盘读取时间,会更方便。
下载速度相对较慢(通常在 5-300kb/s 之间),并且持续时间较长,因此这是一个处理数据而不会影响性能的好机会。虽然对于大多数应用程序来说,显示 CRC 可能会显得丑陋且不实用(可以假设大多数用户会认为他们“弄坏了互联网”当他们看到十六进制数字时),但在下载完成后立即向用户显示 CRC 往往是一个受到欢迎的附加功能。
此类被动地计算 CRC,数据通过该类时即可随时使用。
使用代码
要计算文件在读取到末尾时的 CRC,请创建一个新的 CrcStream
,并将 FileStream
作为参数传递,并使用 ReadCrc
属性来检索 CRC。 确保使用新的 CrcStream
而不是文件流来从文件读取;否则将不会计算校验和。
//Open a file stream, encapsulate it in CrcStream
FileStream file = new FileStream(filename, FileMode.Open);
CrcStream stream = new CrcStream(file);
//Use the file somehow -- in this case, read it as a string
StreamReader reader = new StreamReader(stream);
string text = reader.ReadToEnd();
//Print the checksum
Console.WriteLine("CRC: " + stream.ReadCrc.ToString("X8"));
除了抽象的 Stream
重写之外,还有四个公共成员
ReadCrc
- 获取通过流读取的数据的校验和。WriteCrc
- 获取写入流的数据的校验和。ResetChecksum
- 重置 CRC 值。Stream
- 获取封装的流。