Главная » Java » Потоки Print в Java

0

 

  Классы семейства Print — PrintStream и PrintWriter — содержат объявления ряда методов, которые упрощают задачу вывода (записи) в поток значений простых типов и объектов в удобочитаемом текстовом формате (в предыдущих примерах мы уже пользовались такими методами). В потоковых классах Print реализованы перегруженные версии методов print и println для вывода значений типов, перечисленных ниже.

 

char          int           float               Object     boolean

char[]       long        double             String

 

Эти методы гораздо более удобны для применения, нежели обычные методы по токового вывода (записи) write. Например, выражение out. print(f), предусматривающее вывод содержимого переменной f типа float в поток out типа PrintStream, равнозначно гораздо более пространному и сложному:

             out.write(String.valueOf(f) .getBytes()) ;

  

Метод println добавляет в конец порции выводимых данных, переданной в виде параметра, признак завершения строки; инструкция println без параметров просто завершает текущую строку. Содержимое признака завершения строки определяется значением системного свойства (system property) line.separator (обратитесь к разделу 18.1.2), которое не обязательно должно ограничиваться единственным символом (скажем, \n).

  Каждый из потоков Print действует как поток Filter {cm. раздел 15.4.2 на странице 386), и поэтому в процессе вывода данные могут быть подвержены дополнительной фильтрации.

  Класс PrintStream работает с байтовыми потоками, a PrintWriter— с символьными. Поскольку чаще возникает потребность в записи символов, в обычных ситуациях следует пользоваться средствами класса PrintWriter. Исторически сложилось так, что стандартные потоки System.out и System.err, воспринимающие байты как символы из набора Latin-1, однако, относятся к классу PrintStream — собственно говоря, это единственные потоки PrintStream, которые уместно применять на практике. Мы рассмотрим только класс PrintWriter, имея в виду, что PrintStream реализует почти аналогичный интерфейс.

  В составе классе PrintWriter имеется четыре конструктора, которые описаны ниже.

 

 public PrintWriter(writer out,  boolean autoflush)

Создает объект класса PrintWriter, осуществляющий запись данных в заданный поток out. Если значение флага autoflush равно true, при обращении к println вызывается метод flush. В противном случае println не получает преимуществ перед другими методами, и сброс потока с помощью flush не производится. После создания потока свойство, связанное с автоматическим вызовом flush, изменено быть не может.

public PrintWriter(writer out)

         Конструктор аналогичен предыдущему при условии Pri ntWri ter (out, false).

public Printwriter(outputstream out,  boolean autoflush)

         Конструктор     аналогичен     первому     при     условии     Pri ntWriter(new

         OutputStreamwriter(out),   autoflush).

 public Printwriter(OutputStream out)

         Конструктор   аналогичен   предыдущему   при   условии   PrintWri ter (new

        OutputStreamwriter(out),   false).

  Одна из важных характеристик поведения потоков Print связана с тем, что ни °Дин из реализованных в них методов вывода (записи) не выбрасывает исключения типа IOException. Если при передаче данных "внутреннему" потоку возникает ошибка, методы завершают выполнение нормальным образом. Проверить наличие ошибки можно с помощью вызова метода checkError, возвращающего результат типа boolean; метод осуществляет сброс (flush) потока и проверяет его состояние. ^°ль скоро ошибка произошла, средств очистки состояния потока не существует. &сли любая из операций, выполняемых "внутренним" потоком, вызвала появление исключения interruptedlOException, состояние ошибки не регистрируется, но место этого текущий поток вычислений заново получает уведомление о прерывании посредством Thread.currentThread().interrupt().

 

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

По теме:

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