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

时间:2011-07-29 04:57:27

标签: c# .net memorystream

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);

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

3 个答案:

答案 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}}。