🗊Презентация Программирование на Java. Система ввода-вывода Java. (Лекция 8)

Нажмите для полного просмотра!
Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №1Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №2Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №3Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №4Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №5Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №6Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №7Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №8Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №9Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №10Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №11Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №12Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №13Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №14Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №15Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №16Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №17Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №18Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №19Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №20Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №21Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №22Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №23Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №24Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №25Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №26Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №27Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №28Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №29Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №30Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №31Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №32Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №33Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №34Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №35Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №36Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №37Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №38Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №39Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №40Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №41Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №42Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №43Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №44Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №45Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №46Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №47Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №48Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №49Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №50Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №51Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №52Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №53Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №54Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №55Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №56Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №57Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №58Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №59Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №60Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №61Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №62Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №63Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №64Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №65Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №66Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №67Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №68Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №69Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №70Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №71Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №72Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №73

Содержание

Вы можете ознакомиться и скачать презентацию на тему Программирование на Java. Система ввода-вывода Java. (Лекция 8). Доклад-сообщение содержит 73 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Мультимедийный курс 

Программирование на Java


Лекция 08

Система ввода-вывода Java 
Автор:
Борисенко В. П.
Описание слайда:
Мультимедийный курс Программирование на Java Лекция 08 Система ввода-вывода Java Автор: Борисенко В. П.

Слайд 2





Понятие потоков ввода/вывода
Потоком ввода/вывода (I/O Stream) называется произвольный источник или приемник, который способен генерировать либо получать некоторые данные
Все потоки ведут себя одинаковым образом, хотя физические устройства, с которыми они связаны, могут сильно различаться
Реализация конкретным потоком низкоуровневого способа приема/передачи информации скрыта от программиста
Описание слайда:
Понятие потоков ввода/вывода Потоком ввода/вывода (I/O Stream) называется произвольный источник или приемник, который способен генерировать либо получать некоторые данные Все потоки ведут себя одинаковым образом, хотя физические устройства, с которыми они связаны, могут сильно различаться Реализация конкретным потоком низкоуровневого способа приема/передачи информации скрыта от программиста

Слайд 3





Системы ввода/вывода Java
Основная система ввода/вывода Java представлена пакетом java.io
Пакет java.nio содержит API для работы с новой системой ввода/вывода
Потоки для работы с архивами содержаться в пакете java.util
Описание слайда:
Системы ввода/вывода Java Основная система ввода/вывода Java представлена пакетом java.io Пакет java.nio содержит API для работы с новой системой ввода/вывода Потоки для работы с архивами содержаться в пакете java.util

Слайд 4


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №4
Описание слайда:

Слайд 5


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №5
Описание слайда:

Слайд 6


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №6
Описание слайда:

Слайд 7


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №7
Описание слайда:

Слайд 8


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №8
Описание слайда:

Слайд 9





Класс InputStream
Абстрактный класс InputStream предоставляет минимальный набор методов для работы с входным потоком байтов:
int available() - возвращает количество еще доступных байт потока
int read() - возвращает очередной байт. Значения от 0 до 255. Если чтение невозможно, возвращает -1
int read(byte[] buf, int offset, int count) - вводит байты в массив. Возвращает количество реально введенных байтов
long skip(long n) - пропускает n байтов потока
void close() - закрывает поток и освобождает занятые системные ресурсы
Описание слайда:
Класс InputStream Абстрактный класс InputStream предоставляет минимальный набор методов для работы с входным потоком байтов: int available() - возвращает количество еще доступных байт потока int read() - возвращает очередной байт. Значения от 0 до 255. Если чтение невозможно, возвращает -1 int read(byte[] buf, int offset, int count) - вводит байты в массив. Возвращает количество реально введенных байтов long skip(long n) - пропускает n байтов потока void close() - закрывает поток и освобождает занятые системные ресурсы

Слайд 10





Потомки класса InputStream
ObjectInputStream - поток объектов. Создается при сохранении объектов системными средствами
SequenceInputStream - последовательное соединение нескольких входных потоков
ByteArrayInputStream - использует массив байтов как источник данных
PipedInputStream - совместно с PipedOutputStream обеспечивает обмен данными между двумя потоками выполнения
FileInputStream - обеспечивает чтение из файла
StringBufferInputStream - использует изменяемую строку StringBuffer как источник данных
FilterInputStream - абстрактный класс надстройки над классом InputStream
Описание слайда:
Потомки класса InputStream ObjectInputStream - поток объектов. Создается при сохранении объектов системными средствами SequenceInputStream - последовательное соединение нескольких входных потоков ByteArrayInputStream - использует массив байтов как источник данных PipedInputStream - совместно с PipedOutputStream обеспечивает обмен данными между двумя потоками выполнения FileInputStream - обеспечивает чтение из файла StringBufferInputStream - использует изменяемую строку StringBuffer как источник данных FilterInputStream - абстрактный класс надстройки над классом InputStream

Слайд 11


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №11
Описание слайда:

Слайд 12


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №12
Описание слайда:

Слайд 13





Надстраивание (декорация)
В отличие от наследования надстраивание не ведет к появлению большого числа библиотечных классов. Так если мы имеем классы A1, A2, …, An и хотим комбинировать их свойства  путем наследования, мы вынуждены создать порядка n * n новых классов. Если делать то же путем надстраивания, понадобится всего n новых классов
В java.io имеется несколько потомков FilterInputStream:

  DataInputStream
  BufferedInputStream
  PushBackInputStream
Описание слайда:
Надстраивание (декорация) В отличие от наследования надстраивание не ведет к появлению большого числа библиотечных классов. Так если мы имеем классы A1, A2, …, An и хотим комбинировать их свойства путем наследования, мы вынуждены создать порядка n * n новых классов. Если делать то же путем надстраивания, понадобится всего n новых классов В java.io имеется несколько потомков FilterInputStream: DataInputStream BufferedInputStream PushBackInputStream

Слайд 14


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №14
Описание слайда:

Слайд 15


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №15
Описание слайда:

Слайд 16


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №16
Описание слайда:

Слайд 17


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №17
Описание слайда:

Слайд 18


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №18
Описание слайда:

Слайд 19





Класс OutputStream
Абстрактный класс OutputStream предоставляет минимальный набор методов для работы с выходным потоком байтов
void  write(int b) - Абстрактный метод записи в поток одного байта
void write(byte[] buf, int offset, int count) - Запись в поток массива байтов или его части
void flush()  - Форсированная выгрузка буфера для буферизированных потоков. Если получателем служит другой поток, его буфер тоже сбрасывается
void close() - Закрытие потока и высвобождение системных ресурсов
Описание слайда:
Класс OutputStream Абстрактный класс OutputStream предоставляет минимальный набор методов для работы с выходным потоком байтов void write(int b) - Абстрактный метод записи в поток одного байта void write(byte[] buf, int offset, int count) - Запись в поток массива байтов или его части void flush() - Форсированная выгрузка буфера для буферизированных потоков. Если получателем служит другой поток, его буфер тоже сбрасывается void close() - Закрытие потока и высвобождение системных ресурсов

Слайд 20





Потомки класса OutputStream
ObjectOutputStream - поток двоичных представлений объектов. Создается при сериализации
ByteArrayOutputStream - использует массив байтов как приемник данных
PipedOutputStream - вместе с PipedInputStream составляет пару потоков для обмена данными между потоками выполнения (threads)
FileOutputStream - поток для записи в файл
FilterOutputStream - абстрактный класс надстройки
Описание слайда:
Потомки класса OutputStream ObjectOutputStream - поток двоичных представлений объектов. Создается при сериализации ByteArrayOutputStream - использует массив байтов как приемник данных PipedOutputStream - вместе с PipedInputStream составляет пару потоков для обмена данными между потоками выполнения (threads) FileOutputStream - поток для записи в файл FilterOutputStream - абстрактный класс надстройки

Слайд 21





Надстройки для OutputStream
Надстройками для OuptupStream являются наследники абстрактного класса FilterOutputStream

PrintStream – добавляет возможность преобразования простых типов данных в последовательность байтов. Делает это при помощи перегруженного метода print(), который преобразует и помещает их в выходной поток
BufferedOutputStream – буферизированный выходной поток. Ускоряет вывод.
DataOutputStream - поток для вывода значений простых типов. Имеет такие методы как writeBoolean(), writeInt(), writeLong(), writeFloat() и т.п.
Описание слайда:
Надстройки для OutputStream Надстройками для OuptupStream являются наследники абстрактного класса FilterOutputStream PrintStream – добавляет возможность преобразования простых типов данных в последовательность байтов. Делает это при помощи перегруженного метода print(), который преобразует и помещает их в выходной поток BufferedOutputStream – буферизированный выходной поток. Ускоряет вывод. DataOutputStream - поток для вывода значений простых типов. Имеет такие методы как writeBoolean(), writeInt(), writeLong(), writeFloat() и т.п.

Слайд 22





Буферизированный ввод/вывод
public class FileCopy {
   public static void main(String[] args) {
	try {
	   BufferedInputStream bis = new BufferedInputStream(new FileInputStream("erste.jpg"));
	   BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("zweite.jpg"));
	   int c = 0;
	   while (true) {
		c = bis.read();
		if (c != -1)
			bos.write(c);
		else
			break;
		}
		bis.close();
		bos.flush(); //освобождаем буфер (принудительно записываем содержимое буфера в файл)
		bos.close(); //закрываем поток записи (обязательно!)
	}
	catch (java.io.IOException e) {
		System.out.println(e.toString());
	}
     }
}
Описание слайда:
Буферизированный ввод/вывод public class FileCopy { public static void main(String[] args) { try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream("erste.jpg")); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("zweite.jpg")); int c = 0; while (true) { c = bis.read(); if (c != -1) bos.write(c); else break; } bis.close(); bos.flush(); //освобождаем буфер (принудительно записываем содержимое буфера в файл) bos.close(); //закрываем поток записи (обязательно!) } catch (java.io.IOException e) { System.out.println(e.toString()); } } }

Слайд 23





Символьные потоки
Для работы с символьными потоками в Java существуют два базовых класса – Reader и Writer
Reader содержит абстрактные методы read(…) и close(). Дополнительные методы объявлены в потомках этого класса
Writer содержит абстрактные методы write(…), flush() и close()
Описание слайда:
Символьные потоки Для работы с символьными потоками в Java существуют два базовых класса – Reader и Writer Reader содержит абстрактные методы read(…) и close(). Дополнительные методы объявлены в потомках этого класса Writer содержит абстрактные методы write(…), flush() и close()

Слайд 24





Некоторые потомки класса Writer
BufferedWriter - буферизированный выводной поток. Размер буфера можно менять, хотя размер, принятый по умолчанию, пригоден для большинства задач
CharArrayWriter - позволяет выводить символы в массив как в поток
StringWriter - позволяет выводить символы в изменяемую строку как в поток
PrintWriter - поток, снабженный операторами print() и println()
PipedWriter - средство межпоточного общения
OutputStreamWriter – мост между классом OutputStream и классом Writer. Символы, записанные в этот поток, превращаются в байты. При этом можно выбирать способ кодирования символов
FileWriter - поток для записи символов в файл
FilterWriter – служит для быстрого создания пользовательских надстроек
Описание слайда:
Некоторые потомки класса Writer BufferedWriter - буферизированный выводной поток. Размер буфера можно менять, хотя размер, принятый по умолчанию, пригоден для большинства задач CharArrayWriter - позволяет выводить символы в массив как в поток StringWriter - позволяет выводить символы в изменяемую строку как в поток PrintWriter - поток, снабженный операторами print() и println() PipedWriter - средство межпоточного общения OutputStreamWriter – мост между классом OutputStream и классом Writer. Символы, записанные в этот поток, превращаются в байты. При этом можно выбирать способ кодирования символов FileWriter - поток для записи символов в файл FilterWriter – служит для быстрого создания пользовательских надстроек

Слайд 25





Потомки класса Reader
BufferedReader - буферизированный вводной поток символов
CharArrayReader - позволяет читать символы из массива как из потока
StringReader - то же из строки
PipedReader - парный поток к  PipedWriter
InputStreamReader – при помощи методов класса Reader читает байты из потока InputStream и превращает их в символы. В процессе превращения использует разные системы кодирования
FileReader - поток для чтения символов из файла
FilterReader – служит для создания надстроек
Описание слайда:
Потомки класса Reader BufferedReader - буферизированный вводной поток символов CharArrayReader - позволяет читать символы из массива как из потока StringReader - то же из строки PipedReader - парный поток к PipedWriter InputStreamReader – при помощи методов класса Reader читает байты из потока InputStream и превращает их в символы. В процессе превращения использует разные системы кодирования FileReader - поток для чтения символов из файла FilterReader – служит для создания надстроек

Слайд 26





Пример программы 
Вводить строки с клавиатуры и записывать их в файл на диске.
try {
	// Создаем буферизованный  символьный входной поток
	BufferedReader in = new BufferedReader( 
		new InputStreamReader(System.in));
	// Используем класс PrintWriter для вывода
	PrintWriter out = new PrintWriter (new FileWriter("data.txt"));
	// Записываем строки, пока не введем строку "stop"
	while (true) {
		String s = in.readLine();
		if (s.equals("stop"))
			break;
		out.println(s);
	}
	out.close();
} catch (IOException ex) {
   // Обработать исключение
}
Описание слайда:
Пример программы Вводить строки с клавиатуры и записывать их в файл на диске. try { // Создаем буферизованный символьный входной поток BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); // Используем класс PrintWriter для вывода PrintWriter out = new PrintWriter (new FileWriter("data.txt")); // Записываем строки, пока не введем строку "stop" while (true) { String s = in.readLine(); if (s.equals("stop")) break; out.println(s); } out.close(); } catch (IOException ex) { // Обработать исключение }

Слайд 27


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №27
Описание слайда:

Слайд 28


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №28
Описание слайда:

Слайд 29


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №29
Описание слайда:

Слайд 30


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №30
Описание слайда:

Слайд 31


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №31
Описание слайда:

Слайд 32


Программирование на Java. Система ввода-вывода Java. (Лекция 8), слайд №32
Описание слайда:

Слайд 33





Класс RandomAccessFile
RandomAccessFile применяется для работы с файлами произвольного доступа
Для перемещения по файлу в RandomAccessFile применяется метод seek()
RandomAccessFile  не участвует в рассмотренной выше иерархии, но реализует интерфейсы DataInput и DataOutput (те же, что реализованы классами DataInputStream и DataOutputStream)
Описание слайда:
Класс RandomAccessFile RandomAccessFile применяется для работы с файлами произвольного доступа Для перемещения по файлу в RandomAccessFile применяется метод seek() RandomAccessFile не участвует в рассмотренной выше иерархии, но реализует интерфейсы DataInput и DataOutput (те же, что реализованы классами DataInputStream и DataOutputStream)

Слайд 34





Пример работы с RandomAccessFile
Создать файл прямого доступа, выполнить запись в файл и чтение из файла
RandomAccessFile rf = new RandomAccessFile("rtest.dat", "rw");
// Записать в файл 10 чисел и закрыть файл
for(int i = 0; i < 10; i++)
	rf.writeDouble(i * 1.414);
rf.close();
// Открыть файл, записать в него еще одно число и снова закрыть
rf = new RandomAccessFile("rtest.dat", "rw");
rf.seek(5 * 8);
rf.writeDouble(47.0001);
rf.close();
// Открыть файл с возможностью только чтения "r"
rf = new RandomAccessFile("rtest.dat", "r");
// Прочитать 10 чисел и показать их на экране
for(int i = 0; i < 10; i++)
  System.out.println("Value " + i + ": " + rf.readDouble());
rf.close();
Описание слайда:
Пример работы с RandomAccessFile Создать файл прямого доступа, выполнить запись в файл и чтение из файла RandomAccessFile rf = new RandomAccessFile("rtest.dat", "rw"); // Записать в файл 10 чисел и закрыть файл for(int i = 0; i < 10; i++) rf.writeDouble(i * 1.414); rf.close(); // Открыть файл, записать в него еще одно число и снова закрыть rf = new RandomAccessFile("rtest.dat", "rw"); rf.seek(5 * 8); rf.writeDouble(47.0001); rf.close(); // Открыть файл с возможностью только чтения "r" rf = new RandomAccessFile("rtest.dat", "r"); // Прочитать 10 чисел и показать их на экране for(int i = 0; i < 10; i++) System.out.println("Value " + i + ": " + rf.readDouble()); rf.close();

Слайд 35





Класс File
Класс File предназначен для работы с элементами файловой системы – каталогами и файлами 
Каждый объект File представляет абстрактный файл или каталог, возможно и не существующий
Абстрактный путь, который заключает в себе объект File, состоит из не обязательного системно-зависимого префикса и последовательности имен
Префикс выглядит по-разному в различных операционных системах: символ устройства "C:", "D:" в системе Windows, символ корневого каталога "/" в системе UNIX, символы "\\" в UNC и т.д.
Каждое имя последовательности является именем каталога, а последнее имя может быть именем каталога или файла
Путь может быть абсолютным или относительным
Описание слайда:
Класс File Класс File предназначен для работы с элементами файловой системы – каталогами и файлами Каждый объект File представляет абстрактный файл или каталог, возможно и не существующий Абстрактный путь, который заключает в себе объект File, состоит из не обязательного системно-зависимого префикса и последовательности имен Префикс выглядит по-разному в различных операционных системах: символ устройства "C:", "D:" в системе Windows, символ корневого каталога "/" в системе UNIX, символы "\\" в UNC и т.д. Каждое имя последовательности является именем каталога, а последнее имя может быть именем каталога или файла Путь может быть абсолютным или относительным

Слайд 36





Конструкторы класса File
File(String filePath), где filePath – имя файла на диске
File(String dirPath, String filePath),  здесь параметры dirPath и filePath вместе задают то же, что один параметр в предыдущем конструкторе
File(File dirObj, String fileName), вместо имени каталога  выступает другой объект File
Объект File является неизменяемым объектом !
Описание слайда:
Конструкторы класса File File(String filePath), где filePath – имя файла на диске File(String dirPath, String filePath), здесь параметры dirPath и filePath вместе задают то же, что один параметр в предыдущем конструкторе File(File dirObj, String fileName), вместо имени каталога выступает другой объект File Объект File является неизменяемым объектом !

Слайд 37





Каталоги
Каталог – это особый файл, который содержит в себе список других файлов и каталогов
Для каталога метод isDirectory() возвращает true
Метод File[] listFiles() возвращает список подкаталогов и файлов данного каталога
Пример: получить массив файлов и каталогов, которые находятся в рабочем (или текущем) каталоге
File path = new File(".");  
File[] list = path.listFiles();
for(int i = 0; i < list.length; i++)
	System.out.println(list[i].getName());
Описание слайда:
Каталоги Каталог – это особый файл, который содержит в себе список других файлов и каталогов Для каталога метод isDirectory() возвращает true Метод File[] listFiles() возвращает список подкаталогов и файлов данного каталога Пример: получить массив файлов и каталогов, которые находятся в рабочем (или текущем) каталоге File path = new File("."); File[] list = path.listFiles(); for(int i = 0; i < list.length; i++) System.out.println(list[i].getName());

Слайд 38





Фильтры (интерфейс FileFilter)
Интерфейс FileFilter применяется для проверки, подпадает ли объект File под некоторое условие
Метод boolean accept(File file) возвращает истину, если аргумент удовлетворяет условию 
Метода listFiles(FileFilter filter) класса File принимает в качестве аргумента объект FileFilter и возвращает уже профильтрованный массив из объектов
Описание слайда:
Фильтры (интерфейс FileFilter) Интерфейс FileFilter применяется для проверки, подпадает ли объект File под некоторое условие Метод boolean accept(File file) возвращает истину, если аргумент удовлетворяет условию Метода listFiles(FileFilter filter) класса File принимает в качестве аргумента объект FileFilter и возвращает уже профильтрованный массив из объектов

Слайд 39





Пример работы с фильтрами
Выбрать из текущего каталога лишь те файлы, которые содержат в своем последнем имени буквосочетание, заданное в командной строке
public static void main(final String[] args) {
	File path = new File(".");
	
	// Получить массив объектов
	File[] list = path.listFiles(new FileFilter() {
		public boolean accept(File file) {
			String f = file.getName();
			return !file.isDirectory() && f.indexOf(args[0]) != -1;
		}
	});
	// Напечатать имена файлов
	for(int i = 0; i < list.length; i++) {
		System.out.println(list[i].getName());
	}
}
Описание слайда:
Пример работы с фильтрами Выбрать из текущего каталога лишь те файлы, которые содержат в своем последнем имени буквосочетание, заданное в командной строке public static void main(final String[] args) { File path = new File("."); // Получить массив объектов File[] list = path.listFiles(new FileFilter() { public boolean accept(File file) { String f = file.getName(); return !file.isDirectory() && f.indexOf(args[0]) != -1; } }); // Напечатать имена файлов for(int i = 0; i < list.length; i++) { System.out.println(list[i].getName()); } }

Слайд 40





Новый ввод/вывод
Ее цель – увеличение производительности и обеспечения безопасности при одновременном конкурентном доступе к данным из нескольких потоков.
Основными понятиями нового ввода/вывода являются
Канал (Channel)
Буфер (Buffer)
При работе с каналом прямого взаимодействия с ним нет. Приложение "посылает" буфер в канал, который затем либо извлекает данные из буфера, либо помещает их в него
Описание слайда:
Новый ввод/вывод Ее цель – увеличение производительности и обеспечения безопасности при одновременном конкурентном доступе к данным из нескольких потоков. Основными понятиями нового ввода/вывода являются Канал (Channel) Буфер (Buffer) При работе с каналом прямого взаимодействия с ним нет. Приложение "посылает" буфер в канал, который затем либо извлекает данные из буфера, либо помещает их в него

Слайд 41





Буфер
Буфер представляет собой контейнер для данных простых типов, таких как byte, int, float и др. кроме boolean
Кроме собственно данных, буфер имеет 
текущую позицию
лимит 
емкость
Операции над буфером можно поделить на 
абсолютные - считывают или записывают один или несколько элементов начиная с текущей позиции и увеличивают или уменьшают текущую позицию на количество прочитанных элементов
относительные - производятся начиная с указанного индекса и не изменяют текущей позиции
Описание слайда:
Буфер Буфер представляет собой контейнер для данных простых типов, таких как byte, int, float и др. кроме boolean Кроме собственно данных, буфер имеет текущую позицию лимит емкость Операции над буфером можно поделить на абсолютные - считывают или записывают один или несколько элементов начиная с текущей позиции и увеличивают или уменьшают текущую позицию на количество прочитанных элементов относительные - производятся начиная с указанного индекса и не изменяют текущей позиции

Слайд 42





Методы класса Buffer
clear() – подготавливает буфер для операции записи в него данныx
Он устанавливает лимит равным емкости и позицию равной нулю.
Таким образом, при чтении данныx из канала и записи иx в буфер, они будут туда помещаться с начальной позиции до теx пор, пока буфер не будет полностью заполнен
flip() – подготавливает буфер для чтения из него данныx. 
Он устанавливает лимит равным текущей позиции и после этого устанавливает позицию равной нулю. 
Таким образом, при записи данныx в канал они будут считываться из буфера начиная с начала до того места, до которого он был заполнен
rewind() – подготавливает  буфер для повторного прочтения данныx. 
Он не изменяет лимит и устанавливает позицию равной нулю
Описание слайда:
Методы класса Buffer clear() – подготавливает буфер для операции записи в него данныx Он устанавливает лимит равным емкости и позицию равной нулю. Таким образом, при чтении данныx из канала и записи иx в буфер, они будут туда помещаться с начальной позиции до теx пор, пока буфер не будет полностью заполнен flip() – подготавливает буфер для чтения из него данныx. Он устанавливает лимит равным текущей позиции и после этого устанавливает позицию равной нулю. Таким образом, при записи данныx в канал они будут считываться из буфера начиная с начала до того места, до которого он был заполнен rewind() – подготавливает буфер для повторного прочтения данныx. Он не изменяет лимит и устанавливает позицию равной нулю

Слайд 43





Байтовый буфер (ByteBuffer)
Байтовый буфер предназначен для работы с байтовыми данными
Создать буфер тремя способами:
На основе готового массива байт с помощью статического метода wrap(byte[])
	ByteBuffer bb = ByteBuffer.wrap(new byte[]{12,12});
Пустой буфер заданного размера c помощью метода allocate(int)
	ByteBuffer bb = ByteBuffer.allocate(1024);
Прямой буфер с помощью метода allocateDirect(int).
Описание слайда:
Байтовый буфер (ByteBuffer) Байтовый буфер предназначен для работы с байтовыми данными Создать буфер тремя способами: На основе готового массива байт с помощью статического метода wrap(byte[]) ByteBuffer bb = ByteBuffer.wrap(new byte[]{12,12}); Пустой буфер заданного размера c помощью метода allocate(int) ByteBuffer bb = ByteBuffer.allocate(1024); Прямой буфер с помощью метода allocateDirect(int).

Слайд 44





Прямые и непрямые буферы
ByteBuffer может быть прямым и непрямым
При работе с прямым (direct) буфером виртуальная машина использует напрямую системные операции ввода/вывода. При этом
операции чтения-записи в случае использования прямого буфера проходят быстрее
на создание такого буфера требуется, как правило, большее количество ресурсов
содержимое буфера не контролируется сборщиком мусора
Использовать прямые буферы целесообразно лишь для большиx объемов данныx, к которым обращаются в течение продолжительного времени
Описание слайда:
Прямые и непрямые буферы ByteBuffer может быть прямым и непрямым При работе с прямым (direct) буфером виртуальная машина использует напрямую системные операции ввода/вывода. При этом операции чтения-записи в случае использования прямого буфера проходят быстрее на создание такого буфера требуется, как правило, большее количество ресурсов содержимое буфера не контролируется сборщиком мусора Использовать прямые буферы целесообразно лишь для большиx объемов данныx, к которым обращаются в течение продолжительного времени

Слайд 45





Чтение-запись данных в буфер
Для относительного получения байта данных из буфера используется метод get(), для абсолютного - get(int position)
Для записи байта данных в буфер используется методы put() и put(int)
Также существуют методы для чтения/записи массивов байтов - get(byte[] dst), и др.
При необходимости чтения/записи данных простых типов используются методы getХХХ()/getХХХ(int) и putXXX()/ putXXX(int)
Все эти методы возвращают тот же самый объект ByteBuffer, поэтому допустима следующая запись:
	bb.putInt(0xCAFEBABE).putShort(3).put(255).putFloat(4.5);
Описание слайда:
Чтение-запись данных в буфер Для относительного получения байта данных из буфера используется метод get(), для абсолютного - get(int position) Для записи байта данных в буфер используется методы put() и put(int) Также существуют методы для чтения/записи массивов байтов - get(byte[] dst), и др. При необходимости чтения/записи данных простых типов используются методы getХХХ()/getХХХ(int) и putXXX()/ putXXX(int) Все эти методы возвращают тот же самый объект ByteBuffer, поэтому допустима следующая запись: bb.putInt(0xCAFEBABE).putShort(3).put(255).putFloat(4.5);

Слайд 46





Буферы-представления
При необходимости работать с однотипными данными лучше использовать классы-представления
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
Для создания этиx буферов используются те же методы allocate и wrap, однако размер буфера в данном случае устанавливается в его единицах данных.
Также можно создать представление ByteBuffer в виде, например, CharBuffer:
	ByteBuffer bb = ByteBuffer.allocate(BSIZE);
	bb.asCharBuffer().put("Привет!");
Описание слайда:
Буферы-представления При необходимости работать с однотипными данными лучше использовать классы-представления CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer Для создания этиx буферов используются те же методы allocate и wrap, однако размер буфера в данном случае устанавливается в его единицах данных. Также можно создать представление ByteBuffer в виде, например, CharBuffer: ByteBuffer bb = ByteBuffer.allocate(BSIZE); bb.asCharBuffer().put("Привет!");

Слайд 47





Пример работы с буфером-представлением
public class IntBufferDemo {  
   private static final int BSIZE = 1024;
   public static void main(String[] args) {
     ByteBuffer bb = ByteBuffer.allocate(BSIZE);
     IntBuffer ib =    bb.asIntBuffer();
    // Сохранение массива целых чисел
    ib.put(new int[] { 11, 42, 47, 99, 143, 811, 1016 });
    // Чтение и запись в абсолютных позициях:    
    System.out.println(ib.get(3));
    ib.put(3, 1811);
    ib.rewind();
    while(ib.hasRemaining()) {
      int i = ib.get();
      if(i == 0) break; // Иначе получим буфер целиком
      System.out.println(i);
      }
    }
}
Описание слайда:
Пример работы с буфером-представлением public class IntBufferDemo { private static final int BSIZE = 1024; public static void main(String[] args) { ByteBuffer bb = ByteBuffer.allocate(BSIZE); IntBuffer ib = bb.asIntBuffer(); // Сохранение массива целых чисел ib.put(new int[] { 11, 42, 47, 99, 143, 811, 1016 }); // Чтение и запись в абсолютных позициях: System.out.println(ib.get(3)); ib.put(3, 1811); ib.rewind(); while(ib.hasRemaining()) { int i = ib.get(); if(i == 0) break; // Иначе получим буфер целиком System.out.println(i); } } }

Слайд 48





Файловый канал
Канал представляет собой открытое соединение к некоторой сущности, такой как, например, аппаратное устройство, файл, сетевой сокет или программный компонент, которая может производить операции ввода/вывода
Класс FileChannel позволяет организовать канал доступа к файлу
Для получения файлового канала служат метод getChannel() классов FileInputStream, FileOutputStream и RandomAccessFile
Описание слайда:
Файловый канал Канал представляет собой открытое соединение к некоторой сущности, такой как, например, аппаратное устройство, файл, сетевой сокет или программный компонент, которая может производить операции ввода/вывода Класс FileChannel позволяет организовать канал доступа к файлу Для получения файлового канала служат метод getChannel() классов FileInputStream, FileOutputStream и RandomAccessFile

Слайд 49





Работа с FileChannel
Файловый канал имеет свою позицию, которая устанавливается методом position(long)
Методы read(ByteBuffer) и read(ByteBuffer, int) служат для чтения данныx из канала в переданный буфер с текущей позиции (относительно) или с указанной позиции (абсолютно) соответственно
 Аналогично используются методы write(...)
Для блокировки файла или его части используются методы lock(...). Их использование гарантирует то, что файл, к которому осуществляется доступ, будет блокирован для других процессов
Описание слайда:
Работа с FileChannel Файловый канал имеет свою позицию, которая устанавливается методом position(long) Методы read(ByteBuffer) и read(ByteBuffer, int) служат для чтения данныx из канала в переданный буфер с текущей позиции (относительно) или с указанной позиции (абсолютно) соответственно Аналогично используются методы write(...) Для блокировки файла или его части используются методы lock(...). Их использование гарантирует то, что файл, к которому осуществляется доступ, будет блокирован для других процессов

Слайд 50





Пример работы с FileChannel
public class GetChannel {
   private static final int BSIZE = 1024;
   public static void main(String[] args) throws Exception {
     // Запись в файл:
     FileChannel fc = new FileOutputStream("data.txt").getChannel();
     fc.write(ByteBuffer.wrap("Немного текста ".getBytes()));
     fc.close();
     // Добавление в конец файла:
     fc = new RandomAccessFile("data.txt", "rw").getChannel();
     fc.position(fc.size()); // Переходим в конец
     fc.write(ByteBuffer.wrap("Еще немного".getBytes()));
     fc.close();
     // Чтение файла:
     fc = new FileInputStream("data.txt").getChannel();
     ByteBuffer buff = ByteBuffer.allocate(BSIZE);
     fc.read(buff);
     buff.flip();
     while(buff.hasRemaining())
        System.out.print((char)buff.get()); 
   }
}
Описание слайда:
Пример работы с FileChannel public class GetChannel { private static final int BSIZE = 1024; public static void main(String[] args) throws Exception { // Запись в файл: FileChannel fc = new FileOutputStream("data.txt").getChannel(); fc.write(ByteBuffer.wrap("Немного текста ".getBytes())); fc.close(); // Добавление в конец файла: fc = new RandomAccessFile("data.txt", "rw").getChannel(); fc.position(fc.size()); // Переходим в конец fc.write(ByteBuffer.wrap("Еще немного".getBytes())); fc.close(); // Чтение файла: fc = new FileInputStream("data.txt").getChannel(); ByteBuffer buff = ByteBuffer.allocate(BSIZE); fc.read(buff); buff.flip(); while(buff.hasRemaining()) System.out.print((char)buff.get()); } }

Слайд 51





Копирование файлов 
с использованием FileChannel
public class ChannelCopy {
   private static final int BSIZE = 1024;
   public static void main(String[] args) throws Exception {
   if(args.length != 2) {
     System.out.println("параметры: ФайлИсточник ФайлПолучатель");
     System.exit(1);
   }
   FileChannel in = new FileInputStream(args[0]).getChannel(), 
		out = new FileOutputStream(args[1]).getChannel();
   ByteBuffer buffer = ByteBuffer.allocate(BSIZE);
   while(in.read(buffer) != -1) {
      buffer.flip(); // Подготовим для записи
      out.write(buffer);
      buffer.clear(); // Подготовим для чтения
   }
 }
}
Описание слайда:
Копирование файлов с использованием FileChannel public class ChannelCopy { private static final int BSIZE = 1024; public static void main(String[] args) throws Exception { if(args.length != 2) { System.out.println("параметры: ФайлИсточник ФайлПолучатель"); System.exit(1); } FileChannel in = new FileInputStream(args[0]).getChannel(), out = new FileOutputStream(args[1]).getChannel(); ByteBuffer buffer = ByteBuffer.allocate(BSIZE); while(in.read(buffer) != -1) { buffer.flip(); // Подготовим для записи out.write(buffer); buffer.clear(); // Подготовим для чтения } } }

Слайд 52





Более эффективный 
способ копирования файлов
public class TransferTo {
   public static void main(String[] args) throws Exception {
   if(args.length != 2) {
      System.out.println("параметры: ФайлИсточник ФайлПолучатель");
      System.exit(1);
   }
   FileChannel in = new FileInputStream(args[0]).getChannel();
   FileChannel out = new FileOutputStream(args[1]).getChannel();
   in.transferTo(0, in.size(), out);
   // Или так:
   // out.transferFrom(in, 0, in.size());
 }
}
Описание слайда:
Более эффективный способ копирования файлов public class TransferTo { public static void main(String[] args) throws Exception { if(args.length != 2) { System.out.println("параметры: ФайлИсточник ФайлПолучатель"); System.exit(1); } FileChannel in = new FileInputStream(args[0]).getChannel(); FileChannel out = new FileOutputStream(args[1]).getChannel(); in.transferTo(0, in.size(), out); // Или так: // out.transferFrom(in, 0, in.size()); } }

Слайд 53





Блокировка файлов
Блокировка файлов осуществляется с помощью методов 
FileLock lock(…)
FileLock tryLock(…)
Метод tryLock() не приостанавливает программу. Он пытается овладеть объектом блокировки, но если ему это не удается (если другой процесс уже владеет этим объектом или файл не является разделяемым), то он просто возвращает null
Метод lock() ждет до тех пор, пока 
не удастся получить объект блокировки
поток, в котором этот метод был вызван, не будет прерван
пока не будет закрыт канал, для которого был вызван метод lock()
Блокировка снимается методом release()
Описание слайда:
Блокировка файлов Блокировка файлов осуществляется с помощью методов FileLock lock(…) FileLock tryLock(…) Метод tryLock() не приостанавливает программу. Он пытается овладеть объектом блокировки, но если ему это не удается (если другой процесс уже владеет этим объектом или файл не является разделяемым), то он просто возвращает null Метод lock() ждет до тех пор, пока не удастся получить объект блокировки поток, в котором этот метод был вызван, не будет прерван пока не будет закрыт канал, для которого был вызван метод lock() Блокировка снимается методом release()

Слайд 54





Пример блокировки файла
Механизм блокировки Java напрямую связан со средствами операционной системы
public class FileLocking {
  public static void main(String[] args) throws Exception {
    FileOutputStream fos= new FileOutputStream("file.txt");
    FileLock fl = fos.getChannel().tryLock();
    if(fl != null) {
      System.out.println("Locked File");
      Thread.sleep(1000);
      fl.release();
      System.out.println("Released Lock");
    }
    fos.close();
  }
}
Описание слайда:
Пример блокировки файла Механизм блокировки Java напрямую связан со средствами операционной системы public class FileLocking { public static void main(String[] args) throws Exception { FileOutputStream fos= new FileOutputStream("file.txt"); FileLock fl = fos.getChannel().tryLock(); if(fl != null) { System.out.println("Locked File"); Thread.sleep(1000); fl.release(); System.out.println("Released Lock"); } fos.close(); } }

Слайд 55





Файлы, отображаемые в памяти
Механизм отображения файлов в память позволяет вам создавать и изменять файлы, размер которых слишком велик для прямого размещения в памяти.
В таком случае считается, что файл целиком находится в памяти, и работают с ним как с очень большим массивом
Такой подход значительно упрощает код, который вы пишете для изменения файла
public class LargeMappedFiles {
  static int length = 0x8FFFFFF; // 128 Mb
  public static void main(String[] args) throws Exception {
    MappedByteBuffer out = 
      new RandomAccessFile("test.dat", "rw").getChannel()
                                   .map(FileChannel.MapMode.READ_WRITE, 0, length);
    for(int i = 0; i < length; i++)
      out.put((byte)'x');
    System.out.println("Finished writing");
    for(int i = length/2; i < length/2 + 6; i++)
      System.out.print((char)out.get(i));
  }
}
Описание слайда:
Файлы, отображаемые в памяти Механизм отображения файлов в память позволяет вам создавать и изменять файлы, размер которых слишком велик для прямого размещения в памяти. В таком случае считается, что файл целиком находится в памяти, и работают с ним как с очень большим массивом Такой подход значительно упрощает код, который вы пишете для изменения файла public class LargeMappedFiles { static int length = 0x8FFFFFF; // 128 Mb public static void main(String[] args) throws Exception { MappedByteBuffer out = new RandomAccessFile("test.dat", "rw").getChannel() .map(FileChannel.MapMode.READ_WRITE, 0, length); for(int i = 0; i < length; i++) out.put((byte)'x'); System.out.println("Finished writing"); for(int i = length/2; i < length/2 + 6; i++) System.out.print((char)out.get(i)); } }

Слайд 56





Диаграмма отношений пакета nio
Описание слайда:
Диаграмма отношений пакета nio

Слайд 57





Сериализация
Сериализация позволяет превратить объект в поток байтов, чтобы, когда понадобится, полностью восстановить объект из потока
Сериализация необходима для 
сохранения объектов в постоянной памяти
транспортировки параметров при удаленном вызове методов (RMI - Remote Methods Invocation)
сохранения на диске компонентов JavaBeans
И т.д.
Описание слайда:
Сериализация Сериализация позволяет превратить объект в поток байтов, чтобы, когда понадобится, полностью восстановить объект из потока Сериализация необходима для сохранения объектов в постоянной памяти транспортировки параметров при удаленном вызове методов (RMI - Remote Methods Invocation) сохранения на диске компонентов JavaBeans И т.д.

Слайд 58





Интерфейс Serializable
Чтобы обладать способностью к  сериализации, класс должен:
Реализовать интерфейс-метку   Serializable
Интерфейс Serializable не содержит никаких методов. Он просто служит индикатором того, что класс может быть сериализован
public class MyClass implements Serializable{
		…
}
Все атрибуты класса должны быть сериализуемы
Атрибуты простых типов являются сериализуемыми по умолчанию
Если атрибут  не должен быть сохранен в процессе сериализации, для него необходимо задать модификатор transient 
При сериализации он будет проигнорирован
При десериализации значение этого атрибута будет пустым
Все подтипы сериализуемого класса являются сериализуемыми
Описание слайда:
Интерфейс Serializable Чтобы обладать способностью к сериализации, класс должен: Реализовать интерфейс-метку Serializable Интерфейс Serializable не содержит никаких методов. Он просто служит индикатором того, что класс может быть сериализован public class MyClass implements Serializable{ … } Все атрибуты класса должны быть сериализуемы Атрибуты простых типов являются сериализуемыми по умолчанию Если атрибут не должен быть сохранен в процессе сериализации, для него необходимо задать модификатор transient При сериализации он будет проигнорирован При десериализации значение этого атрибута будет пустым Все подтипы сериализуемого класса являются сериализуемыми

Слайд 59





Запись-чтение объектов
Сериализованные объекты можно записывать и считывать при помощи классов ObjectOutputStream и ObjectInputStream. 
Они таже реализуют интерфейсы DataInput / DataOutput, что дает возможность записывать в поток не только объекты, но и простые типы данных.
writeObject(Object obj) – запись объекта (класс ObjectOutputStream)
Object readObject() – чтение объекта (класс ObjectInputStream). Метод readObject может также генерировать java.lang.ClassNotFoundException
При десериализации объекта, он возвращается в виде объекта класса Object - верхнего класса всей иерархии классов Java. Для того, чтобы использовать десериализованный класс, необходимо произвести явное преобразование его к необходимому типу
Описание слайда:
Запись-чтение объектов Сериализованные объекты можно записывать и считывать при помощи классов ObjectOutputStream и ObjectInputStream. Они таже реализуют интерфейсы DataInput / DataOutput, что дает возможность записывать в поток не только объекты, но и простые типы данных. writeObject(Object obj) – запись объекта (класс ObjectOutputStream) Object readObject() – чтение объекта (класс ObjectInputStream). Метод readObject может также генерировать java.lang.ClassNotFoundException При десериализации объекта, он возвращается в виде объекта класса Object - верхнего класса всей иерархии классов Java. Для того, чтобы использовать десериализованный класс, необходимо произвести явное преобразование его к необходимому типу

Слайд 60





Пример сериализации объектов
public class Point implements java.io.Serializable {
   private int x=0, y = 0; 
   public Point() {}
   public Point(int x, int y) {
     this.x = x; this.y = y;
   }
   public String toString() { return "("+x+","+y+")"; }
}
// Сериализация
java.io.ObjectOutputStream ois = new java.io.ObjectOutputStream(new java.io.FileOutputStream("state.bin"));
ois.writeDouble(3.14159265D);
ois.writeObject("The value of PI");
ois.writeObject(new Point(10,253)); //запись объекта класса Point
ois.flush();
ois.close();
// Десериализация
java.io.ObjectInputStream ois = new java.io.ObjectInputStream(new java.io.FileInputStream("state.bin"));
System.out.println("Double: " + ois.readDouble());
System.out.println("String: " + ois.readObject().toString());
System.out.println("Point: " + (Point) ois.readObject());
ois.close();
Описание слайда:
Пример сериализации объектов public class Point implements java.io.Serializable { private int x=0, y = 0; public Point() {} public Point(int x, int y) { this.x = x; this.y = y; } public String toString() { return "("+x+","+y+")"; } } // Сериализация java.io.ObjectOutputStream ois = new java.io.ObjectOutputStream(new java.io.FileOutputStream("state.bin")); ois.writeDouble(3.14159265D); ois.writeObject("The value of PI"); ois.writeObject(new Point(10,253)); //запись объекта класса Point ois.flush(); ois.close(); // Десериализация java.io.ObjectInputStream ois = new java.io.ObjectInputStream(new java.io.FileInputStream("state.bin")); System.out.println("Double: " + ois.readDouble()); System.out.println("String: " + ois.readObject().toString()); System.out.println("Point: " + (Point) ois.readObject()); ois.close();

Слайд 61





Сериализация наследников несериализуемого класса
Если необходимо, чтобы подкласс несериализумого класса мог быть сериализуем, то:
Сохранение и восстановление public, protected и доступных в рамках пакета полей суперкласса осуществляется самим подклассом
Суперкласс должен содержать доступный (public или  protected) конструктор без параметров для инициализации полей
Ошибка (отсутствие конструктора у суперкласса) в таком случае будет обнаружена во время выполнения
При десериализации поля несериализумого класса будут инициализированы с помощью конструктора без параметров
Поля сериализуемых классов будут восстановлены из потока
Описание слайда:
Сериализация наследников несериализуемого класса Если необходимо, чтобы подкласс несериализумого класса мог быть сериализуем, то: Сохранение и восстановление public, protected и доступных в рамках пакета полей суперкласса осуществляется самим подклассом Суперкласс должен содержать доступный (public или protected) конструктор без параметров для инициализации полей Ошибка (отсутствие конструктора у суперкласса) в таком случае будет обнаружена во время выполнения При десериализации поля несериализумого класса будут инициализированы с помощью конструктора без параметров Поля сериализуемых классов будут восстановлены из потока

Слайд 62





Пример
Если суперкласс сериализуем:
	public class Point implements Serializable{
  		public int x = 0;   public int y = 0;
 		 // без пустого конструктора можно обойтись
		public Point(int x, int y) {this.x = x;   this.y = y; }
	}
	public class PointXYZ extends Point { 
			// нет необходимости указывать  implements Serializable
		private int z = 0;
		public PointXYZ(int x, int y, int z) {   super(x,y);   this.z = z; }
		public String toString() { return "x = "+ x +"; y = " + y + "; z = " + z ; }
	}
Сериализация:
	oos.writeObject(new PointXYZ(10,20,30));
В результате десериализации объект типа PointXYZ  будет восстановлен:
	x = 10; y = 20; z = 30
Описание слайда:
Пример Если суперкласс сериализуем: public class Point implements Serializable{ public int x = 0; public int y = 0; // без пустого конструктора можно обойтись public Point(int x, int y) {this.x = x; this.y = y; } } public class PointXYZ extends Point { // нет необходимости указывать implements Serializable private int z = 0; public PointXYZ(int x, int y, int z) { super(x,y); this.z = z; } public String toString() { return "x = "+ x +"; y = " + y + "; z = " + z ; } } Сериализация: oos.writeObject(new PointXYZ(10,20,30)); В результате десериализации объект типа PointXYZ будет восстановлен: x = 10; y = 20; z = 30

Слайд 63





Пример 2
Если суперкласс несериализуем:
	public class Point {
  		public int x = 0;   public int y = 0;
 		public Point() {   } // без этого конструктора возникнет ошибка
		public Point(int x, int y) {this.x = x;   this.y = y; }
	}
	public class PointXYZ extends Point implements Serializable{
		private int z = 0;
		public PointXYZ(int x, int y, int z) {   super(z,y);   this.z = z; }
		public String toString() { return "x = "+ x +"; y = " + y + "; z = " + z ; }
	}
Сериализация:
	oos.writeObject(new PointXYZ(10,20,30));
В результате десериализации объект типа PointXYZ  будет восстановлен следующим образом:
	x = 0; y = 0; z = 30
Описание слайда:
Пример 2 Если суперкласс несериализуем: public class Point { public int x = 0; public int y = 0; public Point() { } // без этого конструктора возникнет ошибка public Point(int x, int y) {this.x = x; this.y = y; } } public class PointXYZ extends Point implements Serializable{ private int z = 0; public PointXYZ(int x, int y, int z) { super(z,y); this.z = z; } public String toString() { return "x = "+ x +"; y = " + y + "; z = " + z ; } } Сериализация: oos.writeObject(new PointXYZ(10,20,30)); В результате десериализации объект типа PointXYZ будет восстановлен следующим образом: x = 0; y = 0; z = 30

Слайд 64





Управление процессом сериализации
Для выполнения специальной обработки при сериализации и десериализации класс должен реализовать следующие методы:
private void writeObject(java.io.ObjectOutputStream out)  throws IOException
Метод предназначен для записи состояния объекта данного класса так, чтобы соответствующий метод readObject мог их восстановить.
Для сохранения полей объекта может быть использован встроенный механизм , вызываемый out.defaultWriteObject. 
private void  readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException; 
Метод предназначен для чтения из потока и восстановления полей класса. Для восстановления нестатических и не-transient полей может быть использован встроенный механизм, вызываемый in.defaultReadObject. 
Метод defaultReadObject использует данные из потока для присвоения значений  полей сохраненного объекта соответствующим (по имени) полям текущего объекта
Описание слайда:
Управление процессом сериализации Для выполнения специальной обработки при сериализации и десериализации класс должен реализовать следующие методы: private void writeObject(java.io.ObjectOutputStream out) throws IOException Метод предназначен для записи состояния объекта данного класса так, чтобы соответствующий метод readObject мог их восстановить. Для сохранения полей объекта может быть использован встроенный механизм , вызываемый out.defaultWriteObject. private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException; Метод предназначен для чтения из потока и восстановления полей класса. Для восстановления нестатических и не-transient полей может быть использован встроенный механизм, вызываемый in.defaultReadObject. Метод defaultReadObject использует данные из потока для присвоения значений полей сохраненного объекта соответствующим (по имени) полям текущего объекта

Слайд 65





Пример
public class PointXYZ extends Point implements Serializable{
	
	private int z = 0;
	…
	private void writeObject(java.io.ObjectOutputStream out)throws IOException {
		   out.writeInt(x);
		   out.writeInt(y);
		   out.defaultWriteObject(); // cохраняет поле z
	   }
	private void  readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{
		   x = in.readInt();
		   y = in.readInt();
		   in.defaultReadObject(); 
	} 
}
Десериализация:
x = 10; y = 20; z = 30
Описание слайда:
Пример public class PointXYZ extends Point implements Serializable{ private int z = 0; … private void writeObject(java.io.ObjectOutputStream out)throws IOException { out.writeInt(x); out.writeInt(y); out.defaultWriteObject(); // cохраняет поле z } private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{ x = in.readInt(); y = in.readInt(); in.defaultReadObject(); } } Десериализация: x = 10; y = 20; z = 30

Слайд 66





Архивирование
Библиотека ввода/вывода Java содержит классы, поддерживающие чтение и запись потоков в компрессированном формате
Эти классы являются оберткой для существующих классов ввода/вывода для обеспечения возможности компрессирования
Они являются частью иерархии  InputStream и OutputStream
Описание слайда:
Архивирование Библиотека ввода/вывода Java содержит классы, поддерживающие чтение и запись потоков в компрессированном формате Эти классы являются оберткой для существующих классов ввода/вывода для обеспечения возможности компрессирования Они являются частью иерархии InputStream и OutputStream

Слайд 67





Классы для работы с архивами
DeflaterOutputStream – базовый класс для классов компрессии
InflaterInputStream – базовый класс для классов декомпрессии.
ZipOutputStream - DeflaterOutputStream, который компрессирует данные в файл формата Zip.
ZipInputStream - InflaterInputStream, который декомпрессирует данные, хранящиеся в файле формата Zip.
GZIPOutputStream – DeflaterOutputStream, который компрессирует данные в файл формата GZIP.
GZIPInputStream – InflaterInputStream, который декомпрессирует данные, хранящиеся в файле формата GZIP
Описание слайда:
Классы для работы с архивами DeflaterOutputStream – базовый класс для классов компрессии InflaterInputStream – базовый класс для классов декомпрессии. ZipOutputStream - DeflaterOutputStream, который компрессирует данные в файл формата Zip. ZipInputStream - InflaterInputStream, который декомпрессирует данные, хранящиеся в файле формата Zip. GZIPOutputStream – DeflaterOutputStream, который компрессирует данные в файл формата GZIP. GZIPInputStream – InflaterInputStream, который декомпрессирует данные, хранящиеся в файле формата GZIP

Слайд 68





Работа с ZipOutputSream 
	ZipOutputStream out = new ZipOutputStream(new 	FileOutputStream(“archive.zip”));
	pack("111.txt", out);
	pack(“222.txt", out);
	out.close();
// Упаковывает файл по имени fin
static void pack(String fin, ZipOutputStream out) throws IOException {
	// Открыть вводной файл
	FileInputStream in = new FileInputStream(fin);
	// Создать вход 
	out.putNextEntry(new ZipEntry(fin));
	// Выполнить сжатие
	int c;
	while((c = in.read()) != -1)
		out.write(c);
	in.close();
}
Описание слайда:
Работа с ZipOutputSream ZipOutputStream out = new ZipOutputStream(new FileOutputStream(“archive.zip”)); pack("111.txt", out); pack(“222.txt", out); out.close(); // Упаковывает файл по имени fin static void pack(String fin, ZipOutputStream out) throws IOException { // Открыть вводной файл FileInputStream in = new FileInputStream(fin); // Создать вход out.putNextEntry(new ZipEntry(fin)); // Выполнить сжатие int c; while((c = in.read()) != -1) out.write(c); in.close(); }

Слайд 69





Работа с ZipInputStream
ZipInputStream in = new ZipInputStream(new BufferedInputStream(
			        new FileInputStream("111.zip")));
	ZipEntry entry;
	while ((entry = in.getNextEntry()) != null) {
		unpack(in, entry.getName());
	}
static void unpack(ZipInputStream in, String fout) throws IOException {
	// Создать выходной поток
	BufferedOutputStream out = new BufferedOutputStream(
					new FileOutputStream(fout));
	int c;
	while((c = in.read()) != -1) {
		out.write(c);
	}
	out.close();
}
Описание слайда:
Работа с ZipInputStream ZipInputStream in = new ZipInputStream(new BufferedInputStream( new FileInputStream("111.zip"))); ZipEntry entry; while ((entry = in.getNextEntry()) != null) { unpack(in, entry.getName()); } static void unpack(ZipInputStream in, String fout) throws IOException { // Создать выходной поток BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(fout)); int c; while((c = in.read()) != -1) { out.write(c); } out.close(); }

Слайд 70





Логирование
Логирование — это механизм протоколирования различной информации о событиях, происходящих в процессе выполнения программы.
Логирование является прикладной задачей и как правило используется для задач поиска неисправностей, задач учета, задач обеспечения качества.
Основные понятия логирования:
Приемник информации
Уровень
Логгер
Форматтер
Описание слайда:
Логирование Логирование — это механизм протоколирования различной информации о событиях, происходящих в процессе выполнения программы. Логирование является прикладной задачей и как правило используется для задач поиска неисправностей, задач учета, задач обеспечения качества. Основные понятия логирования: Приемник информации Уровень Логгер Форматтер

Слайд 71





Пакет java.util.logging
Пакет java.util.logging предоставляет классы и интерфейсы JavaTM 2 для реализации логирования.
Ключевые элементы этого пакета:
Logger: главная сущность, с помощью которой осуществляется логирование.
LogRecord: используется для передачи запросов логирования между подсистемой логирования и отдельными обработчиками логов.
Handler: Экспортирует объекты LogRecord в различные приемники информации, такие как, память, выходные потоки, консоли и сокеты.
Level: Определяет набор стандартных уровней логирования, которые могут быть использованы для контроля выходной информации.
Filter: Обеспечивает возможность детального контроля выходной информации логирования.
Formatter: Обеспечивает возможность форматирования выходной
Описание слайда:
Пакет java.util.logging Пакет java.util.logging предоставляет классы и интерфейсы JavaTM 2 для реализации логирования. Ключевые элементы этого пакета: Logger: главная сущность, с помощью которой осуществляется логирование. LogRecord: используется для передачи запросов логирования между подсистемой логирования и отдельными обработчиками логов. Handler: Экспортирует объекты LogRecord в различные приемники информации, такие как, память, выходные потоки, консоли и сокеты. Level: Определяет набор стандартных уровней логирования, которые могут быть использованы для контроля выходной информации. Filter: Обеспечивает возможность детального контроля выходной информации логирования. Formatter: Обеспечивает возможность форматирования выходной

Слайд 72





Библиотека log4j
Библиотека логирования log4j — это проект корпорации Apache Software Foundation.
Основные компоненты библиотеки:
Logger — главная сущность логирования.
Appender — приемник информации.
Layout — формат выходной информации.
Описание слайда:
Библиотека log4j Библиотека логирования log4j — это проект корпорации Apache Software Foundation. Основные компоненты библиотеки: Logger — главная сущность логирования. Appender — приемник информации. Layout — формат выходной информации.

Слайд 73





Задание к лекции
 Создать класс, который производит последовательно сериализацию и архивирование объектов. 
 Один метод должен получать объект в качестве параметра и возвращать массив байт, представляющих собой заархивированный объект.
 Второй метод должен выполнять обратную операцию.
 Ход выполнения программы должен логироваться в файл и в консоль. Для логирования используйте на выбор либо пакет java.util.logging, либо библиотеку log4j. Логирование должно быть настроено с помощью соответствующего файла дескриптора
Описание слайда:
Задание к лекции Создать класс, который производит последовательно сериализацию и архивирование объектов. Один метод должен получать объект в качестве параметра и возвращать массив байт, представляющих собой заархивированный объект. Второй метод должен выполнять обратную операцию. Ход выполнения программы должен логироваться в файл и в консоль. Для логирования используйте на выбор либо пакет java.util.logging, либо библиотеку log4j. Логирование должно быть настроено с помощью соответствующего файла дескриптора



Похожие презентации
Mypresentation.ru
Загрузить презентацию