Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции, Кокарева, TR_TKC / 5. Сериализация.docx
Скачиваний:
55
Добавлен:
15.03.2016
Размер:
77.65 Кб
Скачать

Потоковый ввод/вывод. Сериализация

Лекция 5 по дисциплине: Технология разработки ТК сервисов

СибГути

7, 2015

Автор: е.В. Кокорева

1. Понятия ввода и вывода

Понятие ввода относится к различным способам получения информации:

- из файла на диске;

- с клавиатуры;

- из сети и пр.

Аналогично можно определить понятие вывода.

В Java существует абстракция – Stream (поток), для работы с вводом/выводом, которая реализована в классах пакета java.io и служит для того чтобы каждой части кода не нужно было понимать разницу между клавиатурой и сетью.

Потоковый ввод в Java реализован в классе InputStream

вывод – в классе OutputStream.

2. Класс File

File —класс в java.io, который работает непосредственно с дисковыми файлами.

Файлы остаются основными ресурсами для постоянного хранения и совместного использования информации.

Кроме того, класс File определяет средства для работы с каталогами.

Каталог в Java трактуется как обычный файл, но с дополнительным свойством — списком имен файлов, который можно просмотреть с помощью метода list().

Конструкторы класса File

  • File(File dir, String name) – указывается имя объекта класса File (каталог) и имя файла;

  • File(String dirPath) – указывается путь к файлу без указания имени файла;

  • File(String dirPath, Sring name) – указывается путь к файлу и имя файла;

  • File(URI uri) – указывается имя объекта URI, описывающего файл.

Методы класса File

  • getAbsolutePath() – абсолютный путь файла, начиная с корня системы;

  • canRead() – доступно для чтения;

  • canWrite() – доступно для записи;

  • exists() – существует ли файл (true или false);

  • getName() – возвращает имя файла;

  • getParent() – возвращает имя родительского каталога;

  • getPath() – путь;

  • lastModified() – дата последнего изменения;

  • isFile() – объект является файлом;

  • isDirectory() – объект является каталогом;

  • isAbsolute() – возвращает true, если файл имеет абсолютный путь;

  • renameTo(File newPath) – переименовывает файл. В параметре указывается имя нового имени файла. Если переименование прошло неудачно, возвращает false;

  • length() – возвращает размер файла;

  • delete() – удаляет файл или пустой каталог.

Пример:

File f = new File("d:/java/test.txt");

System.out.println("Имя файла:" + f.getName());

System.out.println("Путь:" + f.getPath());

Пример работы с каталогом:

String dirName = "d:/java"; // имя каталога

File f = new File(dirName);

if (f.isDirectory()) { // является ли f каталогом?

System.out.println("Directory of' + dirName);

String s[]=f.list(); // Содержимое каталога

}

3. InputStream

InputStream — абстрактный класс, задающий используемую в Java модель входных потоков.

Все методы этого класса при возникновении ошибки возбуждают исключение IOException.

Методы класса InputStream

  • int read() – возвращает представление очередного доступного символа во входном потоке в виде целого;

  • int read(byte b[]) – пытается прочесть максимум b.length байтов из входного потока в массив b. Возвращает количество байтов, в действительности прочитанных из потока;

  • int read(byte b[], int off, int len) – пытается прочесть максимум len байтов, расположив их в массиве b, начиная с элемента off. Возвращает количество реально прочитанных байтов;

  • int skip(long n) – пытается пропустить во входном потоке n байтов. Возвращает количество пропущенных байтов;

  • int available() – возвращает количество байтов, доступных для чтения в настоящий момент;

  • void close() – закрывает источник ввода. Последующие попытки чтения из этого потока приводят к возбуждению IOException.

4. OutputStream

OutputStream — абстрактный класс. Он задает модель выходных потоков Java.

Все методы этого класса имеют тип void и возбуждают исключение IOException в случае ошибки.

Методы класса OutputStream

  • void write(int b) – записывает один байт в выходной поток. Аргумент этого метода имеет тип int;

  • void write(byte b[]) – записывает в выходной поток весь указанный массив байтов;

  • void write(byte b[], int off, int len) – записывает в поток часть массива в размере len байтов, начиная с элемента b[off];

  • void flush() – очищает любые выходные буферы, завершая операцию вывода;

  • void close() – закрывает выходной поток. Последующие попытки записи в этот поток будут возбуждать IOException.

5. Наследники класса InputStream

  • ByteArrayInputStream – позволяет использовать буфер в памяти (массива байтов) в качестве источника данных для входного потока;

ByteArrayInputStream(byte[] buf);

ByteArrayInputStream(byte[] buf, int offset, int length);

  • FileInputStream – источником данных является файл;

FileInputStream (File file);

FileInputStream (String path);

  • FilterInputStream – абстрактный класс, предоставляющий интерфейс для классов-«декораторов», которые добавляют к существующим потокам дополнительные свойства;

  • PipedInputStream – производит данные, которые были записаны в соответствующий выходной поток PipedOutputStream, реализует концепцию канала (между потоками);

PipedInputStream()

PipedInputStream(int pipeSize)

PipedInputStream(PipedOutputStream src)

PipedInputStream(PipedOutputStream src, int pipeSize)

  • SequenceInputStream – сливает два или более потоков InputStream в единый поток;

SequenceInputStream(Enumeration e)

SequenceInputStream(InputStream s0, InputStream s1)

  • StringBufferInputStream – превращает строку (String) во входной поток данных.

StringBufferInputStream( String s)

Примеры использования входных потоков:

String tmp = "abcdefghijklmnopqrstuvwxyz";

byte b[] = new byte [tmp.length()];

tmp.getBytes(tmp.length());//кодирует строку в //последовательность байт

ByteArrayInputStream input = new ByteArrayInputStream(b);

InputStream is = new FileInputStream(file);

int val;

while ((val = is.read()) != -1) { }

6. Наследники класса OutputStream

  • ByteArrayOutputStream – создаёт буфер в памяти. Все данные из этого потока помещаются в буфер;

ByteArrayOutputStream();

ByteArrayOutputStream(int size);

  • FileOutputStream – помещает данные в файл;

FileOutputStream (File file);

FileOutputStream (String path);

  • FilterOutputStream – абстрактный класс, предоставляющий интерфейс для классов-«декораторов», которые добавляют к существующим потокам дополнительные свойства;

  • PipedOutputStream – данные, записываемые в данный поток, автоматически появляются в ассоциированном с ним входном потоке PipedInputStream, реализует концепцию канала;

PipedOutputStream()

PipedOutputStream(InputStream in)

Пример использования FileOutputStream:

byte b = (byte)System.in.read();

OutputStream f = new FileOutputStream("file1.txt");

f.write(b);