Java InputStreams背后的主要思想是,一旦使用它,就无法重新读取该数据。一般来说,这种情况对大多数情况来说已经足够了。
然而,在某些情况下,我们可能希望以不同的方式多次处理某些数据。例如,假设我正在编写一个类似git的工具。因此,我想首先生成数据的哈希值,然后存储数据,并可能对相同的数据执行更多操作(例如,将数据复制到其他地方或其他任何地方)。
我喜欢考虑这个过程,如下图所示:
data --> hash() --> save() --> replicate() --> ...
| | |
▼ ▼ ▼
aa231e /A/aa231e http://example.org/A/aa231e
更新开始
显然,只要将前几个字节用于hash()函数,我们就可以将它们重用于save()函数,而hash函数则继续运行。因此并行化hash(),save(),replicate()等
更新结束
现在,我想知道:
我还想了解任何可能的解决方案的优缺点和原因。
PS。我不是在寻找一个打开 - 消耗 - 关闭的解决方案,并一次又一次地重新打开相同的流。