2011-05-26 3 views
3

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

См. Нижеприведенный фрагмент кода. Мне хотелось бы знать поведение компилятора как то, что он делает в 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) 
+0

http://download.oracle.com/javase/6/docs/api/java/io/DataInputStream.html#readInt%28%29 –

ответ

7

Метод 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] 
+0

Благодаря Peter..EOFException отлично. Но результаты отличаются в режиме отладки и в режиме запуска. – rozar

+1

Когда вы пишете System.out и System.err (когда написано исключение), порядок вывода не согласован/всегда один и тот же. Использовать debug достаточно, чтобы изменить порядок вывода. –

+0

да .. Но в режиме отладки значения чтения тоже разные. Предположим, если я удаляю предложение while в своем фрагменте кода и заменяю на 5 System.out.println (in.readInt()); – rozar

Смежные вопросы