Подтвердить что ты не робот

Разница между StreamReader.Read и StreamReader.ReadBlock

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

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

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

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

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

Парень отвечает:

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

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

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

4b9b3361

Ответ 1

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