Чтение целочисленных значений из двоичного файла с использованием Java - PullRequest
3 голосов
/ 26 мая 2011

Я пытаюсь записать значения больше 256, используя метод DataOupPutStream.write().Когда я пытаюсь прочитать то же значение, используя DataInputStream.read(), он вернет 0. Итак, я использовал DataOutputStream.writeInt() и DataInputStream.readInt() методы для записи и извлечения значений больше 256, и все работает нормально.

См.ниже фрагмент кода я хотел бы знать поведение компилятора как то, что он делает в in.readInt() внутри оператора while.

FileOutputStream fout = new FileOutputStream("T.txt");
BufferedOutputStream buffOut = new BufferedOutputStream(fout);
DataOutputStream out = new DataOutputStream(fout);

Integer output = 0;
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();

FileInputStream fin = new FileInputStream("T.txt");
DataInputStream in = new DataInputStream(fin);

while ((output = in.readInt()) > 0) {
    System.out.println(output);
}

Выходные данные, когда я запускал этот фрагмент:

Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)
257
2
2123
223
2132

Но когда я работал в режиме отладки, я получаю следующий вывод:

2123
223
2132
Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)

1 Ответ

7 голосов
/ 26 мая 2011

Метод readInt () является методом, подобным любому другому. Вы получаете исключение EOFException, потому что, как говорит Javadoc для readInt (), произойдет, когда вы достигнете конца файла.


Когда я бегу

DataOutputStream out = new DataOutputStream(new FileOutputStream("T.txt"));
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();

DataInputStream in = new DataInputStream(new FileInputStream("T.txt"));
try {
    while (true) 
        System.out.println(in.readInt());
} catch (EOFException ignored) {
    System.out.println("[EOF]");
}
in.close();

Я получаю это в обычном и отладочном режиме.

257
2
2123
223
2132
[EOF]
...