【发布时间】:2013-03-26 18:52:52
【问题描述】:
我有一个 FileStream 连接到一个 xml 文件,我想直接读入一个 SHA512 对象,以便为校验和计算哈希值(不是安全用途)。
问题是双重的:
- 我想省略xml中的一些节点,
- 文件很大,我宁愿不把整个文件加载到内存中
我可以将整个文件读入一个 xml 结构,删除节点,然后将其写入一个流,然后将其插入SHA512.ComputeHash,但这会导致性能损失。我希望能够以某种方式将节点删除作为对流的操作,然后以某种方式将流链接在一起形成一个可以传递给SHA512.ComputeHash(Stream)的流。
我怎样才能做到这一点?
【问题讨论】:
-
源 XML 有多“大”?
-
可能是这样的?使用 XmlReader 读取 XML 文件,将所有需要的节点写入 XmlWriter,XmlWriter 写入更新哈希的流。
-
@RichardTurner:源 XML 目前大约 30 MB 大,但我们假设它可能会比这大得多。是的,我知道这在某些情况下可能是微优化 - 请假设我知道我在做什么。
-
@dtb:问题是根据我的理解,如果我将 XMLWriter 写入内存流,该流将首先填满整个文件,然后它会传递给 ComputeHash .如果有意义的话,我希望进程像管道一样,随时在内存中保留部分 xml 文件。
-
我不是说要写入 MemoryStream。我的意思是写入一个只更新哈希而不存储字节的流。
标签: c# xml xml-parsing stream checksum