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,而它们的byteArray
是int[]
类型。