2015-06-12 2 views
1

Я перехожу к секции ввода вывода, и есть так много классов и интерфейсов, которые меня немного путают.
Как указано в документации, InputStream является потоком, базирующимся на байтах, тогда как Reader является потоком, основанным на символах. Но поскольку я правильно понял, единственная разница между ними заключается в том, что Reader считывает два байта за время вместо одного байта за раз, как это делает InputStream.
Поэтому я не понимаю, есть ли разница:
ИспользованиеInputStreamInputStream vs Reader

byte[] bytes = new byte[2]; 
    InputStream in = new FileInputStream("input.txt"); 
    int bytesRead = in.read(bytes); 
    while(bytesRead != -1) { 
     doSomethingWithData(data); 
     bytesRead = inputstream.read(data); 
    } 

ИспользованиеReader

Reader reader = new InputStreamReader(new FileInputStream("input.txt")); 
int data = reader.read(); 
while (data != -1) { 
    doSomethingWithData(data); 
    data = reader.read(); 
} 

Я действительно запутанным об этих аспектах. Объясните пожалуйста, подробно. Благодарю.

+2

В зависимости от кодировки символ может быть 1 или 2 (или даже больше) байт (ы). – Benjamin

ответ

2

Вы можете использовать Reader для чтения текстовых данных. И он поддерживает кодировку символов как ISO, UTF-8. Если вы хотите, чтобы прочитать текстовый файл с некоторой кодировкой, то вы можете использовать Reader S как - BufferedReader, StringReader и т.д.

И вы можете использовать Stream (InputStream, OutputStream) манипулировать двоичные данные. Например, вы хотите прочитать файл изображения, затем вы можете использовать FileInputStream, и если вы хотите сохранить его на диск, вы можете использовать FileOutputStream.

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