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中。
是的,处理流将导致它被刷新。
- 如何从WPF自动化Microsoft Word 2003?
- IEnumerable 到Stream for FileStreamResult
- 如何将列表框中选择的值分配给枚举变量?
- 我在哪里设置服务参考的CookieContainer?
- 检查null的性能损失
- 类型定义存在于两个库中
- 使用EF / Code First / Repository Pattern / Table Per Type(TPT)时的良好编程原则?
- 在远程计算机上使用Assembly.LoadFrom()加载的程序集导致SecurityException
- 抛出特定exception时,SmtpClient.SendMailAsync会导致死锁