我应该在Stream.CopyTo之前使用Stream.Flush吗?

时间:2015-05-02 10:29:30

标签: c# .net stream memorystream

我有MemoryStream,我正在使用StreamWriter填充一些数据。 最后我想把它转储到不同的流(不总是文件)。

我应该在使用Steram.CopyTo方法之前调用Stream.Flush吗?

3 个答案:

答案 0 :(得分:2)

您永远不需要在内存流上调用 [...] if (isset($param['unique_id'])) { $query->field('id')->equals($param['unique_id']); } return $query->eagerCursor(true)->getQuery()->getSingleResult(); [...] ,因为该操作不执行任何操作。如果查看源代码,则实现为空。您需要在写完后回滚流。

但是,您需要刷新Flush,以确保在开始复制之前将所有数据推送到内存流中。

您可以使用此模式将StreamWriter写入内存流,以避免显式刷新:

StreamWriter

答案 1 :(得分:1)

  

我应该在使用Stream.CopyTo方法之前调用Stream.Flush吗?

不,不需要致电Flush。但是,您需要将Position上的MemoryStream重置为0.

CopyTo文档说:

  

从当前流中的当前位置开始复制,并且在复制操作完成后不会重置目标流的位置。

答案 2 :(得分:1)

我认为您不需要使用内存流来调用Stream.Flush,因为它没有

  

覆盖Stream.Flush方法,以便不执行任何操作。

https://msdn.microsoft.com/en-us/library/system.io.memorystream.flush(v=vs.110).aspx

基本上,Stream.Flush旨在将内存缓冲区刷新到持久存储。使用MemoryStream,Flush 不会执行任何操作