我需要做StreamWriter.flush()吗?
假设这个C#代码:
using (MemoryStream stream = new MemoryStream()) { StreamWriter normalWriter = new StreamWriter(stream); BinaryWriter binaryWriter = new BinaryWriter(stream); foreach(...) { binaryWriter.Write(number); normalWriter.WriteLine(name); //<~~ easier to reader afterward. } return MemoryStream.ToArray(); }
我的问题是:
- 我是否需要在循环内使用flush以保持顺序?
- 返回
MemoryStream.ToArray()
合法吗? 我使用using
-block作为约定,我担心它会搞砸。
抓住前一个答案 – 我没有注意到你在同一个流周围使用了两个包装器。 这对我来说有些冒险。
无论哪种方式,我都会将StreamWriter
和BinaryWriter
放在他们自己的块中。
哦,是的,在MemoryStream
上调用ToArray()
是合法的 – 即使数据被丢弃也会保留数据。
如果你真的想使用这两个包装器,我会这样做:
using (MemoryStream stream = new MemoryStream()) { using (StreamWriter normalWriter = new StreamWriter(stream)) using (BinaryWriter binaryWriter = new BinaryWriter(stream)) { foreach(...) { binaryWriter.Write(number); binaryWriter.Flush(); normalWriter.WriteLine(name); //<~~ easier to read afterward. normalWriter.Flush(); } } return MemoryStream.ToArray(); }
我不得不说,我有点担心在同一个流周围使用两个包装器。 每次操作后你都必须不断刷新它们,以确保你不会得到奇怪的数据。 您可以将StreamWriter
的AutoFlush
属性设置为true以缓解这种情况,我相信 BinaryWriter
目前实际上并不需要刷新(即它不会缓冲任何数据),但依赖于此感觉风险很大。
如果你必须混合使用二进制和文本数据,我会使用BinaryWriter
并显式写入字符串的字节,并使用Encoding.GetBytes(string)
获取它。
更新
没关系这个答案,我和作家混淆了……
- 不,订单将被保留( 更新:可能不会)。 在其他情况下,Flush是有用的/需要的,虽然我不记得什么时候。
- 我想是的, 使用确保一切都很好地清理。