Рубрики
Без рубрики

ObjectInputStream в Java – считывание объекта из файла

ObjectInputStream, пример Java ObjectInputStream, десериализация ObjectInputStream, чтение объекта из файла, метод readObject (), serialVersionUID, ввод-вывод Java

Автор оригинала: Pankaj Kumar.

ObjectInputStream в Java можно использовать для преобразования входного потока в объект. Процесс преобразования входного потока в объект называется десериализацией. В прошлом посте мы узнали об ObjectOutputStream и преобразовали объект java в поток вывода и записи в файл. Здесь мы прочитаем тот же сериализованный файл для создания объекта на java.

Поток ввода объекта

ObjectInputStream является частью классов ввода-вывода Java. Его цель состоит в том, чтобы предоставить нам способ преобразования входного потока в объект в программе java. Конструктор ObjectInputStream принимает InputStream в качестве аргумента. Поскольку мы читаем сериализованный объект из файла, мы будем использовать FileInputStream с нашим ObjectInputStream для чтения объекта из файла.

Пример потока ввода объектов Java

java.io.ObjectInputStream readObject() используется для считывания входного потока в объект. Мы должны выполнить приведение класса, чтобы преобразовать объект в реальный класс. Ниже приведен пример программы ObjectInputStream для чтения объекта из файла.

package com.journaldev.files;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class ObjectInputStreamExample {

	public static void main(String[] args) {
		try {
			FileInputStream is = new FileInputStream("EmployeeObject.ser");
			ObjectInputStream ois = new ObjectInputStream(is);
			Employee emp = (Employee) ois.readObject();
			ois.close();
			is.close();
			System.out.println(emp.toString());
		} catch (ClassNotFoundException | IOException e) {
			e.printStackTrace();
		}
	}

}

На рисунке ниже показан результат, полученный вышеуказанной программой.

В java есть гораздо больше возможностей для сериализации и десериализации. Например, что произойдет, если мы изменим класс java перед десериализацией. В чем польза serialVersionUID ? Что происходит с сериализацией с наследованием, когда суперкласс не реализует сериализуемый интерфейс? Я попытался ответить на эти вопросы в подробном посте, пожалуйста, прочитайте Сериализация в java .

Ссылка: API Doc