同时存储和返回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