假设这个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
-block作为惯例,我担心它会搞砸。抓住前面的答案 - 我没有注意到你在同一个流周围使用了两个包装器。这对我来说有些冒险。
无论哪种方式,我都将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
的AutoFlush
属性设置为true以缓解这种情况,我相信BinaryWriter
目前实际上并不需要刷新(即它不会缓冲任何数据),但依赖于此感觉风险很大。
如果你必须混合二进制和文本数据,我会使用BinaryWriter
并显式写入字符串的字节,并使用Encoding.GetBytes(string)
获取它。
更新
没关系这个答案,我和作家混淆了......