Sat*_*ite 7 .net iostream stream
我有一个以自定义文件格式存储的大型数据集(~1GB),其后16个字节是文件所有先前字节的MD5哈希值.
我想使用HashAlgorithm.ComputeHash(Stream)对嵌入式MD5验证此文件的MD5,但是这将计算整个文件的哈希值,包括最后16字节中的哈希值,这显然不会起作用.
如何计算流的PART的MD5哈希值?我知道我可以将流读入数组并将其传递给HashAlgorithm.ComputeHash(字节),但是在内存中复制这1GB数据的开销是令人望而却步的.
从这里开始,您还可以获得其他方式.
创建一个部分文件流类,读取您想要的大小并对其进行哈希处理.
class PartialFileStream : FileStream
{
public PartialFileStream(string path, FileMode mode, long startPosition, long endPosition): base(path, mode)
{
base.Seek(startPosition, SeekOrigin.Begin);
ReadTillPosition = endPosition;
}
public long ReadTillPosition { get; set; }
public override int Read(byte[] array, int offset, int count)
{
if (base.Position >= this.ReadTillPosition)
return 0;
if (base.Position + count > this.ReadTillPosition)
count = (int)(this.ReadTillPosition - base.Position);
return base.Read(array, offset, count);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |