Десериализация. Класс 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(): считывает из потока объект
Например, извлечем выше сохраненный объект Person из файла:
import java.io.*;
public class FilesApp {
public static void main(String[] args) {
try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat")))
{
Person p=(Person)ois.readObject();
System.out.printf("Имя: %s \t Возраст: %d \n", p.name, p.age);
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
}
}
Теперь совместим сохранение и восстановление из файла на примере списка объектов:
import java.io.*;
import java.util.ArrayList;
public class FilesApp {
public static void main(String[] args) {
String filename = "people.dat";
// создадим список объектов, которые будем записывать
ArrayList<Person> people = new ArrayList();
people.add(new Person("Том", 30, 175, false));
people.add(new Person("Джон", 33, 178, true));
try(ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename)))
{
oos.writeObject(people);
System.out.println("Запись произведена");
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
// десериализация в новый список
ArrayList<Person> newPeople;
try(ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename)))
{
newPeople=(ArrayList<Person>)ois.readObject();
}
catch(Exception ex){
System.out.println(ex.getMessage());
}
for(Person p : newPeople)
System.out.printf("Имя: %s \t Возраст: %d \n", p.name, p.age);
}
}
Дата добавления: 2017-01-26; просмотров: 1390;