Главная » Java » InputStreamReader и OutputStreamWriter в Java

0

 

  Классы InputStreamReader и OutputStreamWriter обеспечивают трансляцию между символьными и байтовыми потоками с учетом заданной кодировки символов или кодировки, принятой по умолчанию в конкретной локальной системе. Объекту InputStreamReader в качестве источника передается байтовый поток ввода, и InputStreamReader обеспечивает чтение соответствующих символов Unicode. Объекту OutputStreamWriter в качестве получателя передается байтовый поток вывода, и OutputStreamWriter сохраняет в нем байтовые представления символов Unicode. Следующий пример кода демонстрирует технику ввода байтов, представляющих символы арабского языка в кодировке ISO 8859-6, и преобразования их в соответствующие символы Unicode:

public Reader  readArabic(String file)  throws  lOException  {

    InputStream filein = new FileinputStream(file);

    return new lnputstreamReader(filein,   "iso-8859-6");

 }

По умолчанию указанные классы, обеспечивающие преобразование потоков, работают с кодировкой символов, принятой в конкретной локальной системе, но Могут    быть    заданы    и    альтернативные    кодировки.    Классы    играют    роль связующего   звена"   и   позволяют   обрабатывать   потоки   8-битовых   символов, представленных в любых стандартных кодировках, в последовательном и сообразном стиле, не зависящем от особенностей применяемой платформы. Вопросы, вязанные со стандартами кодировки символов, рассмотрены в разделе 9.7.1.    Описания    конструкторов    классов    InputStreamReader    и OutputStreamWriter приведены ниже.

 

Public InputStreamReader(inputStream in)

Создает объект InputStreamReader для ввода данных из указанного потока InputStream с учетом кодировки символов, принятой по умолчанию.

 

public InputStreamReader(inputstream in,   String encoding)

 throws unsupportedEncodingException

Создает объект InputStreamReader для ввода данных из указанного по тока Inputstream с учетом заданной кодировки символов encoding. Если кодировка encoding не поддерживается, выбрасывается исключение типа UnsupportedEncodingException.

public 0utputStreamwriter(0utputStream out)

Создает объект OutputStreamwri ter для вывода данных в указанный поток OutputStream с учетом кодировки символов, принятой по умолчанию.

public OutputStreamwriter(OutputStream out,   String encoding)

 throws UnsupportedEncodingException

Создает объект OutputStreamWnter для вывода данных в указанный поток OutputStream с учетом заданной кодировки символов encoding. Если кодировка encoding не поддерживается, выбрасывается исключение типа UnsupportedEncodingException.

   Методы read класса InputStreamReader обеспечивают ввод байтов из заданного потока Inputstream и преобразование их в символы с использованием соответствующей кодировки. Аналогично, методы write клксса OutputStreamWriter получают переданные символы, преобразуют их в байты, используя соответствующую кодировку, и выводят в заданный поток OutputStream.

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

   В обоих классах поддерживается также метод getEncoding, возвращающий строку с каноническим наименованием кодировки, используемой потоком, либо значение null, если поток уже закрыт.

   Классы FileReader и FileWriter являются расширенными версиями классов InputStreamReader и OutputStreamWriter соответственно и обеспечивают возможности обработки файловых данных с поддержкой Unicode и локальных стандартов кодировки символов. Если, однако, кодировка, предлагаемая по умолчанию, вас не устраивает, следует прибегнуть к помощи объектов InputStreamReader или OutputStreamWriter. Более подробные сведения о файловых потоках приведены в разделе 15.6 .

   Классов ReaderlnputStream и WriterOutputStream, которые могли бы обеспечить трансляцию символьных потоков в байтовые и наоборот, не существует.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии