通过 BinaryReader 从 NetStream 读取的正确方法是什么?

What is the correct way to read from a NetStream through a BinaryReader?

我了解到,如果您想从网络流中读取 X 字节,请执行以下操作:

netStream.Read(buffer, 0, X);

在所有情况下都不够,因为读取可能只是 X 的 return 部分,因此您需要循环直到读取字节数等于 X。

然而,另一个示例将 NetStream 包装在 BinaryReader br 中,然后继续:

br.Read(buffer, 0, X);

我的问题是:

由于 NetStream 现在被 BinaryReader 包装这一事实是否有效,或者我们是否仍需要考虑读取可能不会 return 所有 X 字节和循环,就像读取一样来自原始网络流?

BinaryReader.Read(byte[], int, int) 只是将调用转发到基础流。语义是相同的。然而,对于这种情况,还有辅助方法 BinaryReader.ReadBytes(int) 读取特定数量的字节,因此您不必自己跟踪读取了多少字节。

我是这样工作的:

using (NetworkStream netStream = new NetworkStream(...))
using (BinaryReader br = new BinaryReader(netStream))
{
    byte x;
    do
    {
        try
        {
            x = br.ReadByte();
        }
        catch (EndOfStreamException exception)
        {
            x = Byte.MinValue;
        }
    } while (x != byte.MinValue);
}