2009-02-26 33 views
26

La documentación dice simplemente ReadBlock esDiferencia entre StreamReader.Read y StreamReader.ReadBlock

"una versión de bloqueo de Read"

pero ¿qué significa eso?

Alguien más ha hecho la pregunta antes, pero ¿eh?

http://www.pcreview.co.uk/forums/thread-1385785.php

El tipo respondiendo,

Básicamente, esto significa que usted puede confiar en StreamReader.ReadBlock no regresar hasta que se lee todo lo que se ha pedido que, o se ha llegado al final de la corriente.

¿Entiendo correctamente que esto es necesario porque es posible que Read no le proporcione todo lo que pidió? ¿Y que solo porque devuelve 0 NO significa que llegaste al final del archivo?

¿Esto significa verificar algo distinto al número de bytes devueltos (EndOfStream?) O usar ReadBlock?

+0

Ver también [C# - ¿Cuándo usar StreamReader.ReadBlock()? - Desbordamiento de pila] (http://stackoverflow.com/questions/3810455/when-to-use-streamreader-readblock). – user34660

Respuesta

31

ReadBlock no significa que es seguro para subprocesos. Si utiliza Reflector para ver la implementación de StreamReader.ReadBlock (que se hereda de TextReader.ReadBlock), todo lo que hace es realizar varias llamadas al método "Leer" hasta que el método "Leer" devuelva 0 o que hayamos leído como muchos bytes según lo solicitado. Esto es necesario porque el método "Leer" no necesariamente devolverá tantos bytes como usted solicitó.

+0

Si ReadBlock simplemente difiere en Leer hasta que Read devuelva 0, ¿qué sucede si Read devuelve 0 pero no se llegó al final de la secuencia? ¿O es eso imposible? Si Read solo devuelve lo que está listo, ¿hubiera pensado que es teóricamente posible que 0 pueda devolverse en cualquier momento? ¿O es eso incorrecto? –

+1

@J M: al volver 0 siempre se indica que se llegó al final de la secuencia, por lo que Read también está bloqueando hasta que recibe * algo * –

+2

Ah, esa es la última pieza. Lea bloques hasta que al menos tenga algo y bloques de ReadBlock hasta que tenga todo lo que pidió o llegue al final del archivo. De cualquier forma, 0 significa el final del archivo. Eso es genial y gracias. –