Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Haulmont-презентации Java / Haulmont. java_se_4.ppt
Скачиваний:
54
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

Байтовые потоки Data. DataInput и

DataOutput

51• В интерфейсах DataInput и DataOutput определены методы потокового ввода-вывода данных простых типов, а классы DataInputStream и DataOutputStream обеспечивают реализацию интерфейсов, предлагаемую по умолчанию

Интерфейсы, предусматривающие потоковый ввод и вывод бинарных данных, обладают почти одинаковой структурой

Ниже перечислены методы семейств read и write, обеспечивающих ввод и вывод данных каждого из простых типов:

readBoolean (writeBoolean), readChar (writeChar), readByte (writeByte), readShort (writeShort), readInt (writeInt), readLong (writeLong), readFloat (writeFloat), readDouble (writeDouble), readUTF (writeUTF)

Методы интерфейса DataInput обычно реагируют на событие достижения конца потока, выбрасывая исключение типа EOFException, производного от IOException

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Классы потоков Data

52• Для каждого интерфейса Data существует определённый поток Data

• Кроме того, имеется класс RandomAccessFile, который реализует одновременно оба интерфейса Data – ввода и вывода

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

В составе каждого класса Data есть конструкторы, в качестве параметра принимающие ссылки на

другой подходящий поток ввода или вывода

Примеры реализации соответствующих методов приведены в примере 4

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Классы потоков Data

53 Пример 4

public static void writeData(double[] data, String file) throws IOException {

OutputStream fout = new FileOutputStream(file);

DataOutputStream out = new DataOutputStream(fout);

out.writeInt(data.length);

for (int i =0; i < data.length; i++) out.writeDouble(data[i]);

out.close();

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Классы потоков Data

54 Пример 4 (продолжение)

public static double[] readData(String file) throws IOException {

InputStream fin = new FileInputStream(file);

DataInputStream in = new DataInputStream(fin);

double[] data = new double[in.readInt()]; for (int i =0; i < data.length; i++)

data[i] = in.readDouble(); in.close();

return data;

}

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Класс File

55• Класс File реализует ряд полезных средств для работы с файлами и директориями: создание, проверка атрибутов, удаление, переименование

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

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Потоки File

56• Потоковые классы семейства File – FileInputStream, FileOutputStream, FileReader и FileWriter – позволяют трактовать файл как поток, предназначенный для

ввода(чтения) или вывода(записи) данных.

В составе каждого из типов предусмотрены три конструктора, принимающие в качестве пареметра одно из следующих значений:

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

объект класса File, указывающий на файл

объект FileDescriptor

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

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Потоки File

57• Если при использовании байтового или символьного потоков ввода (чтения),

обнаруживается, что файл не существует, выбрасывается исключение типа FileNotFoundException

При доступе к файлу во всех случаях проверяется наличие соответствующих полномочий: если необходимые права на обращение к файлу отсутствуют, генерируется исключение типа SecurityException

Два первых конструктора при построении байтового или символьного потоков вывода(записи) предусматривают создание файла, если такого не существует, при наличии файла его содержимое усекается

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Сериализация объектов

58• Одной из существенных возможностей многих реальных приложений является их способность преобразовывать объекты в байтовые потоки, которые

могут передаваться в пределах сети - например, с целью использования в рамках технологии удалённого вызова метода, - сохраняться на диске в виде файлов, а затем при необходимости восстанавливаться в форме «живых» объектов

Процесс преобразования содержимого объекта в поток байтов принято называть сериализацией объекта, а обратное преобразование – восстановление объекта из данных потока – десериализацией

Потоки Object – ObjectOutputStream и ObjectInputStream - позволяют осуществлять сериализацию и десериализацию объектов

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Сериализация объектов

59• ObjectInputStream и ObjectOutputStream, помимо данных стандартных классов (простых типов, строк и их массивов) позволяют вводить и выводить графы объектов

Под термином граф объекта имеется в виду, что когда содержимое объекта выводится в поток ObjectOutputStream средствами методов writeObject(), в потоки сохраняются наборы байтов, представляющие и текущий объект, и все другие объекты, на который тот ссылается

Поскольку данные об объекте, подвергшимся сериализации, представляются в форме байтов, в семействе потоков Object отсутствуют символьные разновидности Reader и Writer

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

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Сериализация объектов

60 Пример 5 // Сериализация

LinkedList ls = new LinkedList();

FileOutputStream fileOut = new FileOutputStream("list");

ObjectOutputStream out = new ObjectOutputStream(fileOut);

out.writeObject(ls);

// Десериализация

FileInputStream fileIn = new FileInputStream("list"); ObjectInputStream in = new ObjectInputStream(fileIn); LinkedList ls = (LinkedList) in.readObject();

Все права защищены. www.haulmont.ru info@haulmont.com

© HAULMONT, 2013

Соседние файлы в папке Haulmont-презентации Java