Разница между StreamReader.Read и StreamReader.ReadBlock
-
09-09-2019 - |
Вопрос
В документации просто говорится, что ReadBlock
«блокирующая версия Read»
Но что это значит?
Кто-то еще задавал вопрос раньше, но, да?
http://www.pcreview.co.uk/forums/thread-1385785.php
Отвечающий парень сказал
По сути, это означает, что вы можете положиться на Streamreader.ReadBlock не возвращаясь, пока он не прочитал столько, сколько вы его просили, либо достигли конца потока.
Правильно ли я понимаю, что это необходимо, потому что Read может не дать вам всего, что вы просили?И то, что он возвращает 0, НЕ означает, что вы достигли конца файла?
То есть это означает проверку чего-то другого, кроме количества возвращаемых байтов (EndOfStream?), или вместо этого использовать ReadBlock?
Решение
ReadBlock не означает, что он потокобезопасен.Если вы используете Reflector для просмотра реализации StreamReader.ReadBlock (которая унаследована от TextReader.ReadBlock), все, что он делает, — это выполняет несколько вызовов метода «Read», пока либо метод «Read» не вернет 0, либо мы не прочитаем как много байтов по запросу.Это необходимо, поскольку метод «Чтение» не обязательно вернет столько байтов, сколько вы запросили.