为多个消费者读取一次流
Read once stream for multiple consumers
我们有几个(大)图像文件。我们想从这些文件创建缩略图,同时记录它们的 MD5 和。
理想情况下,我们希望程序只读取这些文件一次,并且永远不会返回位置。然而,由于数据服务于两个消费者,虽然我们可以创建多个线程,但我们无法避免多次读取文件。
所以要求是:假设一个只读的、只转发的流,如何使用它来提供 new Bitmap(stream)
和对 md5.ComputeHash(stream)
的调用? (该解决方案应扩展到其他流消费者)
我们如何做到这一点?
针对您的具体情况:
不要调用 md5.ComputeHash(stream)
,而是调用 new CryptoStream(stream, md5, CryptoStreamMode.Read)
。
此流将镜像原始流,但也会通过 MD5 哈希器传递它。
一旦流被读取到末尾,md5
实例将保存哈希。
我们有几个(大)图像文件。我们想从这些文件创建缩略图,同时记录它们的 MD5 和。
理想情况下,我们希望程序只读取这些文件一次,并且永远不会返回位置。然而,由于数据服务于两个消费者,虽然我们可以创建多个线程,但我们无法避免多次读取文件。
所以要求是:假设一个只读的、只转发的流,如何使用它来提供 new Bitmap(stream)
和对 md5.ComputeHash(stream)
的调用? (该解决方案应扩展到其他流消费者)
我们如何做到这一点?
针对您的具体情况:
不要调用 md5.ComputeHash(stream)
,而是调用 new CryptoStream(stream, md5, CryptoStreamMode.Read)
。
此流将镜像原始流,但也会通过 MD5 哈希器传递它。
一旦流被读取到末尾,md5
实例将保存哈希。