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方法可能会为我做这个。 这是真的,还是正在形成一个完全不同的概念?

根据stackoverflow本身:

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

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

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

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

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

Flush方法仅存在于MemoryStream对象中,因为它inheritance自Stream类。 您可以在MemoryStream类的源代码中看到flush方法实际上什么都不做。

通常,Streams会在写入时缓冲数据(如果有缓冲区,则会定期将缓冲区刷新到相关设备),因为写入设备(通常是文件)很昂贵。 MemoryStream写入RAM,因此缓冲和刷新的整个概念是多余的。 数据始终在RAM中。

是的,处理流将导致它被刷新。