65.9K
CodeProject 正在变化。 阅读更多。
Home

CrcStream流校验和计算器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.66/5 (21投票s)

2005 年 10 月 8 日

CPOL

1分钟阅读

viewsIcon

135268

downloadIcon

2024

通过在下载时实时计算 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 - 获取封装的流。
© . All rights reserved.