【问题标题】:Read once stream for multiple consumers为多个消费者读取一次流
【发布时间】:2015-06-12 17:55:27
【问题描述】:

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

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

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

我们怎样才能做到这一点?

【问题讨论】:

标签: c# inputstream


【解决方案1】:

针对您的具体情况:

不要打电话给md5.ComputeHash(stream),而是打电话给new CryptoStream(stream, md5, CryptoStreamMode.Read)
此流将镜像原始流,但也会通过 MD5 哈希器。
将流读取到末尾后,md5 实例将保存哈希。

【讨论】:

  • 可以通过md5.Hash 属性访问哈希吗?
  • 另外你的参数顺序是错误的——它是new CryptoStream(stream, md5, CryptoStreamMode.Read)
  • 这个答案不可扩展,但对于这种情况来说已经足够了。标记为正确,但也希望看到更一般的答案。
猜你喜欢
  • 2022-06-13
  • 2015-11-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
  • 2013-07-31
相关资源
最近更新 更多