Что такое буфер потока файлового ввода-вывода? - PullRequest
0 голосов
/ 13 декабря 2011

Я проверил несколько постов на форуме и не могу найти то, что ищу. Предположим, вы читаете текстовый документ через Ruby. Я понимаю, что поток - это символы, идущие побайтово. Какова цель / наилучшая практика буферизации в этом случае? В моей книге приведено множество примеров использования буфера, но нет реального описания того, что это за буфер и почему он вообще существует. Что я должен учитывать при настройке буфера? Например, книга иллюстрирует следующий метод как:

read (n, buffer = nil) читает в n байтах, пока байты не будут готовы

Я не понимаю, что означает утверждение "пока байты не готовы". Буфер играет роль в этом? Пожалуйста, не стесняйтесь указывать мне в другое место, где это объясняется, я не мог, по жизни, найти его самостоятельно.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2011

IO может быть не только файловым, но и сетевым сокетом. и в сетях у вас регулярно возникает ситуация, когда вы готовы обрабатывать больше данных, но удаленная сторона имеет паузу в отправке данных.

(в этих случаях вы обычно видите индикатор выполнения или элемент счетчика в вашем браузере)

Итак, если вы используете обычные файлы, байты всегда 'готовы'.

0 голосов
/ 13 декабря 2011

В книге Picaxe для IO # прочитано:

Считывает не более int байтов из потока ввода-вывода или в конец файла, если int опущен. Возвращает ноль, если вызывается в конце файла. Если указан буфер (строка), он соответствующим образом изменяется, и входные данные считываются непосредственно в него.

...