Nef*_*zen 27 c# memorystream flush streamwriter
假设这个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();
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
MemoryStream.ToArray()合法吗?我使用using-block作为约定,我担心它会搞砸了.Jon*_*eet 24
抓住前面的答案 - 我没有注意到你在同一个流周围使用了两个包装器.这对我来说有些冒险.
无论哪种方式,我把StreamWriter和BinaryWriter自己的using块.
哦,是的,调用它是合法ToArray()的MemoryStream- 即使数据被处理后数据仍然保留.
如果你真的想使用这两个包装器,我会这样做:
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();
}
Run Code Online (Sandbox Code Playgroud)
我不得不说,我有点担心在同一个流周围使用两个包装器.每次操作后你都必须不断刷新它们,以确保你不会得到奇怪的数据.您可以在设定StreamWriter的AutoFlush属性为true来缓解的情况,我相信是BinaryWriter目前不实际需要冲洗(即它不缓冲任何数据),但依托,感觉有风险的.
如果你必须混合二进制和文本数据,我会使用a BinaryWriter并显式写入字符串的字节,并使用它来获取Encoding.GetBytes(string).
| 归档时间: |
|
| 查看次数: |
26996 次 |
| 最近记录: |