C# 直通流(不必保存到中间的内存)
在我的c#程序中,我使用的是一个对象(第三方,因此我无法更改其源代码),该对象在其构造函数中接受一个流(C# 直通流(不必保存到中间的内存),c#,memory,stream,streamreader,C#,Memory,Stream,Streamreader,在我的c#程序中,我使用的是一个对象(第三方,因此我无法更改其源代码),该对象在其构造函数中接受一个流(var myObject=new myObject(stream);) 我的挑战是,在准备将文件提供给此对象之前,我需要对文件的某些行进行一些更改 为此,我编写了以下代码(它确实有效): 因此,这确实可行,但它似乎效率很低,因为它不再真正地流式传输信息,而是在将信息传递给对象之前将其全部存储在内存流中 是否有一种方法可以创建转换/通过流,该转换/通过流将: 从streamreader中读取每一
var myObject=new myObject(stream);
)
我的挑战是,在准备将文件提供给此对象之前,我需要对文件的某些行进行一些更改
为此,我编写了以下代码(它确实有效):
因此,这确实可行,但它似乎效率很低,因为它不再真正地流式传输信息,而是在将信息传递给对象之前将其全部存储在内存流中
是否有一种方法可以创建转换/通过流,该转换/通过流将:
谢谢 您只需创建自己的类,该类派生自Stream,并实现MyObject所需的方法 通过在StreamReader上调用匹配的Read/ReadAsync方法来实现所有Read/ReadAsync方法。然后,可以在数据通过时修改数据 如果修改需要对数据进行某种理解,那么您将有一些工作要做,因为您一次要处理未知数量的字节。您需要将数据缓冲到进行必要转换所需的程度,但是如何进行缓冲,这与您想要实现的流转换非常具体
不幸的是,C#Stream类的设计负担很重,因此实现Stream的整个API是一项相当艰巨的工作,但很可能您的MyObject只调用流上的一个或两个方法,因此需要进行一些实验,它很快就会工作。谢谢这就是我现在想要做的。。。我只是希望有一种更好/更简单的方式/
using (var st = new MemoryStream())
using (var reader = new StreamReader(path))
{
using (var writer = new StreamWriter(st))
{
while (!reader.EndOfStream)
{
var currentLine = reader.ReadLine().Replace(@"XXXX", @"YYYY");
writer.Write(currentLine);
}
writer.Flush();
st.Position = 0;
var myObject = new MyObject(st);
}
}