33 Java. Потоки ввода-вывода. Работа с файлами. Белорусский государственный экономический университет кафедра экономической информатики
![]()
|
Десериализация. Класс 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 вставить в предыдущий пример, то после работы программы можно получить следующий результат: ![]() |