чтение значений из текстового файла - PullRequest
0 голосов
/ 07 июня 2011

Пожалуйста, объясните поведение компилятора в следующем фрагменте кода. Предположим, текстовый файл содержит следующий текст TOBE и соответствующие значения байтов равны 84, 79, 66, 69

for(int i=0;i<4;i++){
    byte inByte=(byte) buffInputFile.read();
    system.out.println(inByte);
}

Когда я запускаю этот фрагмент, я получаю следующий вывод 84 79 66 69

Но когда я перезагружу петлю for и войду внутрь. BuffInputFile.read () сначала показывает мне 84, а когда присваивается inByte, это 79. и вывод, который я получаю,

79,66,69,13 (13 - возврат каретки).

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Я подозреваю, что у вас есть выражение для просмотра отладчика buffInputFile.read() - которое читает значение из потока, чтобы отобразить его ... но тогда это значение недоступно при выполнении метода как часть кода . Вы прочитали этот байт из потока, поэтому следующий вызов read() будет читать следующий байт, в точности так, как он должен.

В общем, очень плохая идея запускать методы с побочными эффектами в отладчике, как это - это вызывает именно такую ​​путаницу. Если вы просто установите точку останова на строке после присваивания, вы сможете увидеть значения таким образом.

Короче говоря: это не компилятор поведение работает совсем не так - это то, как вы используете отладчик.

1 голос
/ 07 июня 2011

Это не ошибка, это особенность.Метод read возвращает следующий байт из потока и устанавливает внутренний маркер на следующую позицию.

Когда вы проверяете buffInputFile.read() с помощью отладчика, вы фактически вызываете этот метод, и отладчик показывает фактическое значение. Но маркер был установлен на следующую позицию, поэтому inByte получит следующее значение из потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...