Почему метод read() считывает символы через один?

При чтении из файла метод read() считывает символы через один. Независимо от того, используется ли байтовый или символьный поток.

do {
r = fi.read(); // считываю символ
if(r != -1) fo.write(r); // записываю его в файл, если не достигнут конец файла
} while (fi.read() != -1) // чтение и запись выполняются, пока не достигнут конец файла

Если изменить последнюю строку на

while (r != -1)

проблема устраняется. Какая разница между значением, которое имеет переменная, и тем, которое возвращает метод, ведь оно, получается, одно и то же?


Ответы (1 шт):

Автор решения: Roman Konoval

Проблема в том, что каждый вызов read читает новый символ из файла.

Это значит, что и при проверке в условии while символ считывается, но никуда не записывается. Поэтому каждый второй символ - отбрасывается.

→ Ссылка