MemoryStream: зачем конвертировать в байты после readByte

В этом примере из MS вы заметите, что после чтения байта из потока памяти он переходит в int, который затем должен быть преобразован в байт. Мне кажется странным, что функция типа .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);

то есть. вы можете использовать длину без броска. Это достаточно хорошая причина?

Ответ 1

Это не относится к потоку памяти, скорее это из-за дизайна базового класса "Поток", и причина этого -

Возвращаемое значение:

Беззнаковый байт передается в Int32 или -1, если в конце потока.

-1 не может быть представлен с использованием unsigned byte

Ответ 2

Когда вы используете ReadByte Если чтение выполнено успешно, текущая позиция в потоке продвигается на один байт. но он предназначен для возврата -1, если конец потока достигнут.

Теперь это не будет допустимым значением для Byte (его без знака)

ms.Read(buf,0,lenth); Здесь lenth - это количество байтов, которые нужно прочитать из потока, и то, что вы получаете от ReadByte, - это первый байт, который не будет использоваться этим способом, что-то вроде

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

Ответ 3

Я действительно верю, что они конвертируются с тем, что от int до byte в realllllyly nice way, так как ReadByte() возвращает int, а их byteArray имеет тип int[].