Разница между StreamReader.Read и StreamReader.ReadBlock - PullRequest
29 голосов
/ 26 февраля 2009

В документации просто сказано, что ReadBlock равен

«блокирующая версия Read»

но что это значит?

Кто-то еще задавал вопрос раньше, но, да?

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

Парень, отвечая, сказал

По сути, это означает, что вы можете положиться на StreamReader.ReadBlock не возвращаясь до тех пор, пока он не прочитает столько, сколько вы просили, или Достигнут конец потока.

Правильно ли я понимаю, что это необходимо, потому что Read может дать вам не все, о чем вы просили? И то, что он возвращает 0, НЕ означает, что вы достигли конца файла?

Таким образом, это означает, что нужно проверить что-то кроме числа возвращаемых байтов (EndOfStream?) Или использовать вместо него ReadBlock?

1 Ответ

32 голосов
/ 26 февраля 2009

ReadBlock не означает, что он потокобезопасен. Если вы используете Reflector, чтобы посмотреть на реализацию StreamReader.ReadBlock (которая унаследована от TextReader.ReadBlock), все, что он делает, это делает несколько вызовов метода «Read», пока либо метод «Read» не вернет 0, либо мы прочитаем как много байтов по запросу. Это необходимо, потому что метод «Read» не обязательно вернет столько байтов, сколько вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...