MemoryStream:为什么在readByte之后转换为byte

在MS的这个例子中 ,你会注意到在我们从内存流中读取一个字节后,它会进入一个int,然后必须将其转换为byte。 令我感到奇怪的是,像.ReadByte()这样的函数.ReadByte()不返回一个字节。 MS有这样做的原因吗?

 // Read the remaining bytes, byte by byte. while(count < memStream.Length) { byteArray[count++] = Convert.ToByte(memStream.ReadByte()); } 

一个念头发生在我身上。 也许这取决于使用情况。 也许ReadByte()通常用于检索短长度,这些后续因素通过长度变化在检索中消耗

 int length=ms.ReadByte(); ms.Read(buf,0,lenth); 

即你可以使用没有演员表的长度。 这是一个足够好的理由吗?

这不是特定于内存流,而是因为基类“Stream”的设计,原因是

返回值:

无符号字节转换为Int32,如果在流的末尾则为-1。

-1无法使用无符号字节表示

使用ReadByte如果读取成功,则流中的当前位置前进一个字节。 但它的设计目的是在达到流的末尾时返回-1。

现在这不是Byte (无符号)的有效值

ms.Read(buf,0,lenth); 这里ReadByte是从流中读取的字节数,你从ReadByte获得的是第一个字节,它不能以这种方式使用,类似于

 byte[] buff = new byte[ms.Length]; ms.Read(buff , 0, buff .Length); 

我确实认为他们正在以一种非常好的方式从int转换为byte ,因为ReadByte()返回一个int,而它们的byteArrayint[]类型。