繁体   English   中英

流链计算校验和:避免内存问题

[英]Stream chaining in computing a checksum: avoiding memory issues

我有一个连接到xml文件的FileStream ,我想直接将其读入SHA512对象,以便为校验和(不是安全用途)而计算哈希值。

问题是双重的:

  1. 我想省略xml中的某些节点,
  2. 该文件很大,我宁愿不将整个内容加载到内存中

我可以将整个文件读取为xml结构,删除节点,然后将其写入流中,然后将其插入SHA512.ComputeHash ,但这会导致性能下降。 我希望能够以某种方式删除节点,作为对流的操作,然后将这些流以某种方式链接在一起,成为可以传递到SHA512.ComputeHash(Stream)的单个流。

我该怎么做?

using (var hash = new SHA512Cng())
using (var stream = new CryptoStream(Stream.Null, hash, CryptoStreamMode.Write))
using (var writer = XmlWriter.Create(stream))
using (var reader = XmlReader.Create("input.xml"))
{
    while (reader.Read())
    {
        // ... write node to writer ...
    }

    writer.Flush();
    stream.FlushFinalBlock();
    var result = hash.Hash;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM