MemoryStream: por qué convertir a byte después de readByte

En este ejemplo de MS , notará que después de leer un byte de la secuencia de memoria, entra en un int que se debe convertir en byte. Me parece extraño que una función como .ReadByte() no devuelva un byte en primer lugar. ¿Hay alguna razón por la cual MS lo hizo de esta manera?

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

un pensamiento se me ocurrió. Tal vez esto se reduce a su uso. Quizás ReadByte() se usa a menudo para recuperar longitudes cortas, qué subsecuentes se consumen en la recuperación a través de la variedad de longitud

 int length=ms.ReadByte(); ms.Read(buf,0,lenth); 

Es decir, puede utilizar la longitud sin un molde. ¿Es esta una razón suficientemente buena?

Esto no es específico del flujo de memoria, sino que se debe al diseño de la clase base “Stream” y la razón de ello es

Valor de retorno:

El byte sin firmar se convierte en un Int32, o -1 si se encuentra al final de la secuencia.

-1 no se puede representar utilizando un byte sin signo

Cuando usa ReadByte Si la lectura es exitosa, entonces la posición actual dentro del flujo avanza un byte. pero está diseñado para devolver -1 si se ha alcanzado el final de la secuencia.

Ahora bien, este no sería un valor válido para Byte (no está firmado)

ms.Read(buf,0,lenth); Aquí lenth es el número de bytes para leer del flujo y lo que se obtiene de ReadByte es el primer byte que no se usa de esta manera, algo así como

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

Creo que están convirtiendo con eso de int a byte de una manera ReadByte() agradable, ya que ReadByte() devuelve un int y su byteArray es de tipo int[] .