已经有一个公认的答案,但这让我觉得很脏:-)我认为我们可以做得更好:
- 如果您使用的是 .NET 4.5,则应使用 BinaryReader 的 3-arg 构造函数。完毕。
- 如果您使用的是 .NET 3.5/4.0,则需要不同的解决方案
Jon Skeet(接受的答案)建议永远不要丢弃 BinaryReader。好吧,这当然可行,但可能会引起混乱。
另一种解决方案可能是将 Stream 包装在 NonClosingStreamWrapper 中,然后再将其传递给 BinaryReader。BinaryReader 将在处理包装器时关闭它,但 NonClosingStreamWrapper 不会处理您的底层流。您仍然可以在 binaryStream 上使用 .Dispose (或者更好的是使用模式)。
非常讽刺的是,@JonSkeet 已经创建了一个 NonClosingStreamWrapper 来做到这一点。这是他的miscutil library的一部分。(但请注意许可证)
using(var reader = new BinaryReader(new NonClosingStreamWrapper(myStream)))
{
//...
}