Esto es un poco más complicado de lo que había imaginado. Estoy tratando de leer n bytes de una secuencia.¿Cómo leo exactamente n bytes de una secuencia?
MSDN claims que Read no tiene que devolver n bytes, solo debe devolver al menos 1 y hasta n bytes, siendo 0 bytes el caso especial de llegar al final de la secuencia.
Por lo general, estoy usando algo así como
var buf = new byte[size];
var count = stream.Read (buf, 0, size);
if (count != size) {
buf = buf.Take (count).ToArray();
}
yield return buf;
estoy esperando por exactamente size
bytes, pero por espectrometría de FileStream se le permitiría devolver un gran número de trozos de 1 byte también. Esto debe ser evitado.
Una forma de resolver esto sería tener 2 almacenamientos intermedios, uno para leer y otro para recoger los fragmentos hasta que obtengamos el número solicitado de bytes. Eso es un poco engorroso sin embargo.
También eché un vistazo a BinaryReader pero su especificación tampoco indica claramente que se devolverán n bytes con seguridad.
Para aclarar: Por supuesto, al final de la secuencia, el número devuelto de bytes puede ser menor que size
- eso no es un problema. Solo estoy hablando de no recibir n bytes aunque estén disponibles en la transmisión.
el 'BinaryReader.ReadBytes (int)' devuelve el número de bytes solicitados; si la secuencia finaliza antes, devolverá lo que leyó hasta ese punto (por lo tanto, menos de lo solicitado). –
@bosonix Eso sería conveniente. ¿Tienes una fuente para esta información? – mafu
esto se especifica en la página de MSDN https://msdn.microsoft.com/en-us/library/system.io.binaryreader.readbytes(v=vs.110).aspx y también miré el código desensamblado. –