Главная страница

33 Java. Потоки ввода-вывода. Работа с файлами. Белорусский государственный экономический университет кафедра экономической информатики


Скачать 1.6 Mb.
НазваниеБелорусский государственный экономический университет кафедра экономической информатики
Дата06.01.2023
Размер1.6 Mb.
Формат файлаdocx
Имя файла33 Java. Потоки ввода-вывода. Работа с файлами.docx
ТипЛитература
#874813
страница10 из 13
1   ...   5   6   7   8   9   10   11   12   13

Десериализация. Класс ObjectInputStream


Класс ObjectInputStream отвечает за обратный процесс - чтение ранее сериализованных данных из потока. В конструкторе он принимает ссылку на поток ввода:
ObjectInputStream(InputStream in)

Функционал ObjectInputStream сосредоточен в методах, предназначенных для чтения различных типов данных. Рассмотрим основные методы этого класса:

void close() - закрывает поток;

int skipBytes(int len) - пропускает при чтении несколько байт, количество которых равно len;

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

int read() - считывает из потока один байт и возвращает его целочисленное представление;

boolean readBoolean() - считывает из потока одно значение

boolean;

byte readByte() - считывает из потока один байт;

char readChar() - считывает из потока один символ char; double readDouble() - считывает значение типа double; float readFloat() - считывает из потока значение типа float; int readInt() - считывает целочисленное значение int;

long readLong() - считывает значение типа long; short readShort() - считывает значение типа short;

String readUTF() - считывает строку в кодировке UTF-8; Object readObject() - считывает из потока объект.
Пример.


Результат работы программы:



Теперь совместим сохранение и восстановление из файла на примере списка объектов.
Пример.


Результат работы программы:



Исключение данных из сериализации


По умолчанию сериализуются все переменные объекта. Однако, возможно, иногда хотелось бы, чтобы некоторые поля были исключены из сериализации. Для этого они должны быть объявлены с модификатором transient. Например, исключим из сериализации объекта Person переменную age.
Пример.

class Person implements Serializable {


private String name; private transient int age;

//методы

Person(String n, int a) { name = n;

age = a;

}

String getName() {return name;} int getAge(){ return age;}

}



Если данное определение класса со словом transient вставить в

предыдущий пример, то после работы программы можно получить следующий результат:



1   ...   5   6   7   8   9   10   11   12   13


написать администратору сайта