C#刷新StreamWriter和一个MemoryStream

use*_*155 4 c# flush

我使用下面的代码片段,我不确定是否需要调用Flush方法(一旦打开StreamWriter,一次打开MemoryStream):

    //converts an xsd object to the corresponding xml string, using the UTF8 encoding
    public string Serialize(T t)
    {
        using (var memoryStream = new MemoryStream())
        {
            var encoding = new UTF8Encoding(false);

            using (var writer = new StreamWriter(memoryStream, encoding))
            {
                var serializer = new XmlSerializer(typeof (T));
                serializer.Serialize(writer, t);
                writer.Flush();
            }

            memoryStream.Flush();

            return encoding.GetString(memoryStream.ToArray());
        }
    }
Run Code Online (Sandbox Code Playgroud)

首先,因为代码在using块内,我认为自动调用dispose方法可能会为我做这个.这是真的,还是正在形成一个完全不同的概念?

根据stackoverflow本身:

Flush意思清除流的所有缓冲区,并使任何缓冲的数据写入底层设备.

在上面的代码中,这意味着什么?

其次,MemoryStream 根据api,flush的方法没有任何作用,那么具体是什么呢?为什么我们称之为无效的方法?

Guf*_*ffa 10

您不需要使用FlushStreamWriter,因为您正在处理它(通过将它放在一个using块中).当它被丢弃时,它会自动冲洗并关闭.

你不需要使用FlushMemoryStream,因为它不是缓冲写入到任何其他来源的任何东西.任何地方都没有什么可以冲洗的.

Flush方法仅存在于MemoryStream对象中,因为它继承自Stream该类.你可以在看的源代码MemoryStreamflush方法实际上什么也不做.