Почему метод read() считывает символы через один?
При чтении из файла метод read() считывает символы через один. Независимо от того, используется ли байтовый или символьный поток.
do {
r = fi.read(); // считываю символ
if(r != -1) fo.write(r); // записываю его в файл, если не достигнут конец файла
} while (fi.read() != -1) // чтение и запись выполняются, пока не достигнут конец файла
Если изменить последнюю строку на
while (r != -1)
проблема устраняется. Какая разница между значением, которое имеет переменная, и тем, которое возвращает метод, ведь оно, получается, одно и то же?
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Проблема в том, что каждый вызов read читает новый символ из файла.
Это значит, что и при проверке в условии while символ считывается, но никуда не записывается. Поэтому каждый второй символ - отбрасывается.