2015-05-23 3 views
0

Я узнаю об I/O и абстракции потока. Я столкнулся с этим маленьким игрушечным примером, который должен открыть поток, прикрепленный к текстовому файлу, и отобразить содержимое (простой текст ASCII) для назначения по умолчанию, прикрепленного к System.out, консоли .. Это ничего не отображает, где я ошибаюсь?Метод PrintStream write (int i) не работает?

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 


public class Test { 

public static void main(String[] args) throws IOException { 
    InputStream in=new FileInputStream("readme.my"); 
    while (true) { 
     int byteRead=in.read(); 
     if (byteRead==-1) break; 
     System.out.write(byteRead); 
    } 
} 
} 
+2

Работает для меня. Попытайтесь добавить System.out.flush() в конец, чтобы очистить поток. И близко, хорошо, это хорошая практика кодирования. –

+0

@JPMoresmau да, промывка потока работает для меня тоже .. Я не знал, что PrintStream нуждается в промывке (я думал, что он автоматически покраснет на завершение программы ..). Закрытие потока также работает, поскольку он очищает поток до закрытия, я думаю .. – Luca

ответ

0

`System.out.write (byteRead); вызов записывает байт as-is (без какого-либо преобразования) в стандартный поток вывода для вашего приложения. Кодировка символа выходного потока зависит от того, как вы настроили свою систему.

  • Если вы читаете из двоичного файла, есть хороший шанс, что он не содержит печатаемые символы ... в зависимости от кодировки символов по умолчанию.

  • Файл может быть пустым.

Если вы пытаетесь отобразить в виде десятичных байтов, то вы должны использовать метод print; пожалуйста, javadocs за PrintStream.


Также возможно, что проблема в том, что System.out поток не продували, и, следовательно, некоторые данные не выводится. Попробуйте позвонить flush() после выхода петли.

(The System.out и/или System.err потоков может быть настроен на AutoFlush каждый раз, когда они видят символ новой строки. Однако, если ваш входной файл не содержит символов новой строки, что не произойдет.)


(Я думал, что он автоматически покраснет на завершение программы ..).

Неплохо полагаться на «Я, хотя это ...». Проверьте javadocs. В этом случае javadocs для System.out не укажет, что это происходит, поэтому ваше предположение выходит за рамки «spec».

+0

Файл является простым 7-битным ASCII, поэтому он сделан из байта, представляющего печатные символы по определению. Я просто копирую эти байты (между 32 и 127) и отправляю их на консоль, где они должны отображаться как текст (консоль интерпретирует эти числа как символы, или так я понял) – Luca

+0

......... ........... – Luca

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