为多个消费者读取一次流

Read once stream for multiple consumers

我们有几个(大)图像文件。我们想从这些文件创建缩略图,同时记录它们的 MD5 和。

理想情况下,我们希望程序只读取这些文件一次,并且永远不会返回位置。然而,由于数据服务于两个消费者,虽然我们可以创建多个线程,但我们无法避免多次读取文件。

所以要求是:假设一个只读的、只转发的流,如何使用它来提供 new Bitmap(stream) 和对 md5.ComputeHash(stream) 的调用? (该解决方案应扩展到其他流消费者)

我们如何做到这一点?

针对您的具体情况:

不要调用 md5.ComputeHash(stream),而是调用 new CryptoStream(stream, md5, CryptoStreamMode.Read)
此流将镜像原始流,但也会通过 MD5 哈希器传递它。
一旦流被读取到末尾,md5 实例将保存哈希。