我使用下面的代码片段,我不确定是否需要调用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
您不需要使用Flush它StreamWriter,因为您正在处理它(通过将它放在一个using块中).当它被丢弃时,它会自动冲洗并关闭.
你不需要使用Flush的MemoryStream,因为它不是缓冲写入到任何其他来源的任何东西.任何地方都没有什么可以冲洗的.
该Flush方法仅存在于MemoryStream对象中,因为它继承自Stream该类.你可以在看的源代码MemoryStream类的flush方法实际上什么也不做.