C#刷新StreamWriter和一个MemoryStream

我使用下面的代码片段,我不确定是否需要调用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());
        }
    }

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

根据*本身:

Flush meaning clears all buffers for a stream and causes any buffered data to be written to the underlying device.

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

其次,MemoryStream does nothing according to the api的flush方法,那有什么用呢?为什么我们称之为无效的方法?

解决方法:

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

您不需要在MemoryStream上使用Flush,因为它不会缓冲写入任何其他源的任何内容.任何地方都没有什么可以冲洗的.

Flush方法仅存在于MemoryStream对象中,因为它继承自Stream类.你可以在source code for the MemoryStream class中看到flush方法实际上什么也没做.

上一篇:尽早flushing文档


下一篇:如何在linux中使用ioctl(原始分区)正确刷新磁盘缓存