Десериализация. Класс 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; просмотров: 1384;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.