Язык SQL

Символьные потоки


Классы Reader и Writer осуществляют поддержку символьного ввода’ и вывода. Основное отличие между байтовым вводом/выводом (I/O) и символьным I/O заключается в использовании кодирования символов Unicode, поддерживающего 16- битовые символы и предназначенного для интернационализации программ. При использовании классов Header и Writer текстовые потоки строятся из однобитовых символов, но операции ввода/вывода правильным образом выполняют преобразование между локальным кодированием и символами Unicode, используемыми в памяти для Java-типов string и char. Эти классы были впервые предложены в версии Java 1.1 для замены классов stream при текстовом вводе/выводе. Приводившийся ранее метод print, создающий текстовый файл, лучше реализовать с помощью PrintWriter, чем с помощью PrintStream.

Метод read класса Movie, описанный ранее, можно написать проше, если использовать метод, считывающий строку и возвращающий ее значение в виде String. Такой метод имеется в классе BufferedReader. Символ конца строки не является частью строки, возвращаемой методом readLine.

Метод read, представленный в строках 2—7 на 11.5, считывает информацию из потока и присваивает полям вызываемого объекта значения из последующих трех полей потока. Присваивание значений полям паше и genre (строки 4 и 6, соответственно) является ссылочным присваиванием. Метод readLine создает объекты string , а присваивания делают так, что соответствующие поля объекта Movie ссылаются на эти объекты. Заметим, что в строке 5 строковое представление поля id преобразуется В простое целое значение типа int с помощью метода Integer .parselnt.

1 public class Movie {

2 public void read (BufferReader in) throws IOException {

3 //считывание объекта Movie в вызываемый объект

4 name = in.readLine();

5 id = Integer.parselnt(in.readLine());

6 genre= in.readLine();

7 }

8 public static Movie readlnstance (BufferedReader in)

9 throws IOException{

10 //создание нового объекта Movie и считывание в него из Reader

11 Movie newMovie = new Movie О;

12 newMovie.read (in) ;

13 return newMovie;

14 }

15 );

В методе Movie. read создается представление объекта Movie в памяти из текстового представления потока путем созданий новых объектов в памяти и преобразования простых текстовых представлений в более сложные Java-представления памяти. Этот метод можно использовать для считывания объекта из стандартного ввода следующим образом.

BufferedReader in =

new BufferedReader(new InputStreamReader(System.in));

Movie m = new Movie();

m.read(in);

Такое сложное создание BufferedReader необходимо потому, что его конструкторы нуждаются в предоставлении Reader, й только InputStreamReader может сконструировать Reader из InputStream вида System, in.

Альтернативой загрузке существующего объекта из потока является использование статического метода readlnstance (строки 8—13 на 11.5), который создает новый объект, загружает его из потока и возвращает его. Этот метод можно вызвать следующим образом:

Movie m = Movie.readlnstance (in);

Комментарии закрыты