Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 直通流(不必保存到中间的内存)_C#_Memory_Stream_Streamreader - Fatal编程技术网

C# 直通流(不必保存到中间的内存)

C# 直通流(不必保存到中间的内存),c#,memory,stream,streamreader,C#,Memory,Stream,Streamreader,在我的c#程序中,我使用的是一个对象(第三方,因此我无法更改其源代码),该对象在其构造函数中接受一个流(var myObject=new myObject(stream);) 我的挑战是,在准备将文件提供给此对象之前,我需要对文件的某些行进行一些更改 为此,我编写了以下代码(它确实有效): 因此,这确实可行,但它似乎效率很低,因为它不再真正地流式传输信息,而是在将信息传递给对象之前将其全部存储在内存流中 是否有一种方法可以创建转换/通过流,该转换/通过流将: 从streamreader中读取每一

在我的c#程序中,我使用的是一个对象(第三方,因此我无法更改其源代码),该对象在其构造函数中接受一个流(
var myObject=new myObject(stream);

我的挑战是,在准备将文件提供给此对象之前,我需要对文件的某些行进行一些更改

为此,我编写了以下代码(它确实有效):

因此,这确实可行,但它似乎效率很低,因为它不再真正地流式传输信息,而是在将信息传递给对象之前将其全部存储在内存流中

是否有一种方法可以创建转换/通过流,该转换/通过流将:

  • 从streamreader中读取每一小量
  • 对那个小数目进行调整
  • 把那笔钱流出来
  • <>所以中间不会有大量的内存存储?


    谢谢

    您只需创建自己的类,该类派生自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);
        }
    }