Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
62
Добавлен:
08.06.2015
Размер:
837.63 Кб
Скачать

Группа потоков File

FileInputStream, FileReader

FileOutputStream, FileWriter

Позволяют трактовать файл как поток, предназначенный для ввода и вывода данных

Связаны с исключениями FileNotFoundException и

SecurityException

Конструкторы могут получать параметры:

Строку String, задающую имя файла

Объект класса File

Объект FileDescriptor

(возвращается методом getFD() байтовых потоков)

21

Классы-трансляторы

Позволяют читать из байтового как из символьного

изаписывать в байтовый поток как в символьный (с учетом кодировки)

InputStreamReader

InputStreamReader(InputStream in)

InputStreamReader(InputStream in, String encoding) throws UnsupportedEncodingException

OutputStreamWriter

OutputStreamWriter(OutputStream out)

OutputStreamWriter(OutputStream out, String encoding) throws UnsupportedEncodingException

22

InputStreamReader и

OutputStreamWriter

InputStream inputStream = new FileInputStream("c:\\input.txt");

Reader reader = new InputStreamReader(inputStream, "UTF-8");

int data = reader.read(); while(data != -1){

char с = (char) data; data = reader.read();

}

reader.close();

OutputStream outputStream = new FileOutputStream("c:\\out.txt");

Writer writer = new OutputStreamWriter(outputStream, "UTF-8");

writer.write("The very first line");

writer.close();

23

Группа потоков Filter

FilterInputStream, FilterReader

FilterOutputStream, FiltrerWriter

Обертки, позволяют объединять потоки в цепочки для получения сложных потоков, обладающих расширенным набором функций

Обладают дополнительными защищенными

конструкторами

protected FilterInputStream(InputStream in)

В наследниках обычно переопределяются методы чтения/записи с добавлением новой функциональности

24

Группа потоков Buffered

BufferedInputStream, BufferedReader

BufferedOutputStream, BufferedWriter

Обертки, осуществляют буферизацию данных на программном уровне

Размер буфера можно задать в конструкторе

Символьные версии имеют методы чтения строк

ивставки символа новой строки:

readLine(), newLine()

25

Группа потоков Buffered

InputStream in = new BufferedInputStream(

new FileInputStream("c:\\in.bin"), 8 * 1024);

OutputStream out = new BufferedOutputStream(

new FileOutputStream("c:\\out.bin"), 8 *

1024);

Reader input = new BufferedReader(

new FileReader("c:\\in.txt"), 8 * 1024);

Writer writer = new BufferedWriter(

new FileWriter("c:\\out.txt"), 8 * 1024);

BufferedReader input = new BufferedReader(

new InputStreamReader(System.in)); String s = input.readLine();

System.out.println("Input string is: " + s);

26

Группа потоков Piped

PipedInputStream, PipedReader

PipedOutputStream, PipedWriter

Используются в виде пар ввода-вывода

Данные, переданные в поток вывода, служат источником для потока ввода

Например, реализуют механизм обмена данными между нитями

Поток-пара задается параметром конструктора либо с помощью метода connect()

27

Группа потоков Piped

OutputStream pipedOutputStream = new PipedOutputStream();

while(moreData) {

int data = getMoreData(); pipedOutputStream.write(data);

}

output.close();

InputStream input = new PipedInputStream(pipedOutputStream);

int data = input.read(); while(data != -1) {

doSomethingWithData(data); data = input.read();

}

input.close();

28

Класс StreamTokenizer

Не является потоком чтения, но позволяет обрабатывать информацию из них

Содержит методы лексической обработки текста

Ряд методов предназначен для настройки работы анализатора

Метод nextToken() производит обработку очередной лексемы, после чего:

Поле ttype содержит константу типа лексемы

Поля nval и sval содержат числовое и строковое представление лексемы

29

Класс StreamTokenizer

StreamTokenizer tokenizer = new StreamTokenizer( new StringReader("This is example string"));

while(tokenizer.nextToken() != StreamTokenizer.TT_EOF){

if(tokenizer.ttype == StreamTokenizer.TT_WORD) { System.out.println(tokenizer.sval);

}else if(tokenizer.ttype == StreamTokenizer.TT_NUMBER) {

System.out.println(tokenizer.nval);

}else if(tokenizer.ttype == StreamTokenizer.TT_EOL) {

System.out.println();

}

}

30