我已经在 github 和 NuGet 上提供了 SplitStream。
事情是这样的。
using (var inputSplitStream = new ReadableSplitStream(inputSourceStream))
using (var inputFileStream = inputSplitStream.GetForwardReadOnlyStream())
using (var outputFileStream = File.OpenWrite("MyFileOnAnyFilestore.bin"))
using (var inputSha1Stream = inputSplitStream.GetForwardReadOnlyStream())
using (var outputSha1Stream = SHA1.Create())
{
inputSplitStream.StartReadAhead();
Parallel.Invoke(
() => {
var bytes = outputSha1Stream.ComputeHash(inputSha1Stream);
var checksumSha1 = string.Join("", bytes.Select(x => x.ToString("x")));
},
() => {
inputFileStream.CopyTo(outputFileStream);
},
);
}
Run Code Online (Sandbox Code Playgroud)
我还没有在非常大的流上测试过它,但请尝试一下。
github: https: //github.com/microknights/SplitStream
不是开箱即用的。
您需要以 FIFO 方式缓冲原始流中的数据,仅丢弃所有“读取器”流已读取的数据。
我会用:
| 归档时间: |
|
| 查看次数: |
6051 次 |
| 最近记录: |