同时存储和返回FileStream

我有一个方法通过返回一个System.IO.FileStream指向打开的文件来读取流文件。 我现在想要做的是将流存储到System.IO.MemoryStream中。

最简单的选择是首先将FileStream读入MemoryStream,然后将MemoryStream返回给调用者。 但这意味着我必须在返回之前将整个文件缓冲到内存中,从而延迟对调用者的流式响应。

我想做什么(如果可能的话)是将FileStream读入一个MemoryStream,并将其同时传送给调用者。 这样,文件在返回之前不必被缓冲,并且最终仍然存储到MemoryStream中。


您可以创建Stream类的自定义实现,在其中将数据写入内存流,或者使用我可以在以下位置找到的版本:http://upreader.codeplex.com/SourceControl/changeset/view /d287ca854370#src%2fUpreader.Usenet.Nntp%2fEncodings%2fRecordStream.cs

这可以通过以下方式使用:

using (FileStream fileStream = File.Open("test.txt", FileMode.Open))
using (RecordStream recordStream = new RecordStream(fileStream))
{
    // make sure we record incoming data
    recordStream.Record();

    // do something with the data
    StreamReader reader = new StreamReader(recordStream);
    string copy1 = reader.ReadToEnd();

    // now reset 
    recordStream.Playback();

    // do something with the data again
    StreamReader reader = new StreamReader(recordStream);
    string copy2 = reader.ReadToEnd();

    Assert.AreEqual(cop1, copy2);
}

我特别为网络流构建了这个类,但它与fileStream同样适用,并且它只在读取文件一次而不返回之前缓冲它

一个简单的实现将是

class RecordStream : Stream
{
    public Stream BaseStream { get; }

    public MemoryStream Record { get; }

    ....

    public override int  Read(byte[] buffer, int offset, int count)
    {
      int result = BaseStream.Read(buffer, offset, count);

        // store it
        Record.Write(buffer, offset, count);

        return result;
    }
}
链接地址: http://www.djcxy.com/p/53663.html

上一篇: Simultaneously storing and returning a FileStream

下一篇: StreamReader returning another char