为多个消费者读取一次流
Posted
技术标签:
【中文标题】为多个消费者读取一次流【英文标题】:Read once stream for multiple consumers 【发布时间】:2015-06-12 17:55:27 【问题描述】:我们有一些(大)图像文件。我们想从这些文件中创建缩略图,同时记录它们的 MD5 和。
理想情况下,我们希望程序只读取这些文件一次,并且永远不会返回。然而,由于数据服务于两个消费者,虽然我们可以创建多个线程,但我们无法避免多次读取文件。
所以要求是:假设一个只读的、只转发的流,如何使用它来同时提供new Bitmap(stream)
和对md5.ComputeHash(stream)
的调用? (该解决方案应该扩展到其他流消费者)
我们怎样才能做到这一点?
【问题讨论】:
我有one 【参考方案1】:针对您的具体情况:
不要打电话给md5.ComputeHash(stream)
,而是打电话给new CryptoStream(stream, md5, CryptoStreamMode.Read)
。
此流将镜像原始流,但也会通过 MD5 哈希器。
将流读取到末尾后,md5
实例将保存哈希。
【讨论】:
可以通过md5.Hash
属性访问哈希吗?
另外你的参数顺序是错误的——它是new CryptoStream(stream, md5, CryptoStreamMode.Read)
。
这个答案不可扩展,但对于这种情况来说已经足够了。标记为正确,但也希望看到更一般的答案。以上是关于为多个消费者读取一次流的主要内容,如果未能解决你的问题,请参考以下文章