在this example from MS中,您会注意到在我们从内存流中读取一个字节后,它会进入一个int,然后必须将其转换为byte。令我感到奇怪的是,像.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);
即。你可以使用没有演员的长度。这是一个足够好的理由吗?
答案 0 :(得分:26)
这不是特定于内存流,而是因为基类“Stream”的设计,原因是
返回值
转换为Int32的无符号字节,如果在流的末尾则为-1。
-1无法使用无符号字节
表示答案 1 :(得分:5)
使用ReadByte
时如果读取成功,则流中的当前位置前进一个字节。但它的设计目的是在达到流的末尾时返回-1。
现在这不是Byte
(无符号)
ms.Read(buf,0,lenth);
这里lenth是从流中读取的字节数,你从ReadByte
获得的是第一个字节,它不能以这种方式使用,类似于
byte[] buff = new byte[ms.Length];
ms.Read(buff , 0, buff .Length);
答案 2 :(得分:0)
我确实认为他们正在以int
转换为byte
,因为ReadByte()
会返回一个int而byteArray
的类型为{int[]
1}}。