How can I split (copy) a Stream in .NET?

后端 未结 7 2310
北荒
北荒 2020-12-03 11:59

Does anyone know where I can find a Stream splitter implementation?

I\'m looking to take a Stream, and obtain two separate streams that can be independently read a

7条回答
  •  醉酒成梦
    2020-12-03 12:23

    I have made a SplitStream available on github and NuGet.

    It goes like this.

    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);
            },
        );
    }
    

    I have not tested it on very large streams, but give it a try.

    github: https://github.com/microknights/SplitStream

提交回复
热议问题