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

sgt*_*gtz 13 .net c# memorystream

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

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

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

int length=ms.ReadByte();
ms.Read(buf,0,lenth);
Run Code Online (Sandbox Code Playgroud)

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

Ank*_*kur 28

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

返回值:

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

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


V4V*_*tta 5

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

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

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

byte[] buff = new byte[ms.Length];
ms.Read(buff , 0, buff .Length);
Run Code Online (Sandbox Code Playgroud)