2017-02-21 3 views
0

Мой вопрос: у меня есть предположение, что $stdin.read загружает всю строку ввода в память сразу, а .getc загружает только один символ за раз.

Это правильно, я не уверен?

ответ

0

IO#read:

Считывает длину байт из потока ввода/вывода.

длина должно быть неотрицательным целым числом или nil.

Если длина является положительным целым числом, он пытается прочитать длину байт без какого-либо преобразования (двоичный режим). Он возвращает nil или строку, длина которой длина составляет от 1 до длина байт. nil означает, что он встретил EOF в начале. Строка длиной от 1 до длиной-1 байт означает, что она выполнила EOF после прочтения результата. длина байт строка означает, что она не соответствует EOF. Приведенная строка всегда кодирует ASCII-8BIT.

Если длина опущен или nil, он не читает до EOF и преобразование кодирования применяется. Он возвращает строку, даже если EOF встречается в начале .

Если длина равна нулю, возвращается "".

Если присутствует необязательный аргумент outbuf, он должен ссылаться на строку , которая будет принимать данные. Outbuf будет содержать только полученные данные после вызова метода, даже если он не пуст в начале .

В конце файла он возвращает nil или "" зависит от длина. ios.read() и ios.read(nil)"". ios.read(positive-integer) возвращение nil.

IO#getc:

Читает строку из одного символа из КСН. Возвращает nil, если вызывается в конце файла .