为多个消费者读取一次流

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) 这个答案不可扩展,但对于这种情况来说已经足够了。标记为正确,但也希望看到更一般的答案。

以上是关于为多个消费者读取一次流的主要内容,如果未能解决你的问题,请参考以下文章

使用多个分片重新读取的 AWS Kinesis 数据顺序

来自不同消费者组的多个消费者如何从同一个分区中读取?

RabbitMQ第一次不能正常读取第二次正常的问题

后端 activemq队列模式下的多个消费者问题

2020-07-28 activeMq 两种模式的测试

C ++ - 生产者/消费者只允许在定义的块中消费