假设这个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();
}
我的问题是:
MemoryStream.ToArray()
合法吗?我使用using
- 块作为约定,我担心它会搞砸。答案 0 :(得分: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();
}
我不得不说,我有点担心在同一个流周围使用两个包装器。每次操作后你都必须不断刷新它们,以确保你不会得到奇怪的数据。您可以将StreamWriter
的{{3}}属性设置为true以缓解这种情况,并且我相信 BinaryWriter
当前不实际 em>需要刷新(即它不会缓冲任何数据)但依赖它会感到风险。
如果你必须混合二进制和文本数据,我会使用BinaryWriter
并显式写入字符串的字节,并使用Encoding.GetBytes(string)
获取它。
答案 1 :(得分:0)
<强>更新强>
没关系,我对作家感到困惑......