Освоение Java ObjectInputStream: подробное руководство
Класс Java ObjectInputStream
Класс ObjectInputStream в пакете java.io позволяет десериализовать объекты, ранее записанные через ObjectOutputStream. Он расширяет абстрактный класс InputStream.
Перед изучением ObjectInputStream убедитесь, что вы знакомы с классом ObjectOutputStream, который отвечает за сериализацию.
Как работает ObjectInputStream
Сериализация преобразует Java-объекты в байтовый поток для хранения или передачи. Десериализация — обратный процесс — обрабатывается ObjectInputStream, который читает байтовый поток и восстанавливает исходные объекты.
Создание ObjectInputStream
Импортируйте класс и свяжите его с источником, обычно FileInputStream:
// Связь с файлом
FileInputStream fileStream = new FileInputStream("example.dat");
// Обертывание в ObjectInputStream
ObjectInputStream objStream = new ObjectInputStream(fileStream);
После создания objStream может читать любые сериализованные объекты из файла.
Ключевые методы ObjectInputStream
read()— читает один байт.readBoolean()— читает boolean значение.readChar()— читает символ.readInt()— читает целое число.readObject()— восстанавливает объект из потока.
Пример 1: Базовая десериализация
Минимальный пример записи целого числа и строки в файл, затем чтения обратно.
import java.io.*;
public class Main {
public static void main(String[] args) {
int data1 = 5;
String data2 = "This is programiz";
try {
// Запись данных
FileOutputStream fos = new FileOutputStream("file.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(data1);
oos.writeObject(data2);
// Чтение данных
FileInputStream fis = new FileInputStream("file.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
System.out.println("Integer data :" + ois.readInt());
System.out.println("String data :" + ois.readObject());
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Вывод
Integer data :5 String data :This is programiz
Пример 2: Десериализация пользовательского объекта
Сериализация и десериализация простого объекта Dog. Класс должен реализовывать Serializable.
import java.io.*;
class Dog implements Serializable {
String name;
String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Tyson", "Labrador");
try {
// Сериализация
FileOutputStream fos = new FileOutputStream("file.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(dog);
// Десериализация
FileInputStream fis = new FileInputStream("file.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Dog newDog = (Dog) ois.readObject();
System.out.println("Dog Name: " + newDog.name);
System.out.println("Dog Breed: " + newDog.breed);
oos.close();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Вывод
Dog Name: Tyson Dog Breed: Labrador
Ключевые выводы:
- Используйте
ObjectOutputStreamдля записи объектов. - Используйте
ObjectInputStreamдля чтения обратно. - Только объекты, реализующие
Serializable, могут быть сериализованы.
Дополнительные методы ObjectInputStream
| Метод | Описание |
|---|---|
available() | Возвращает количество байтов, читаемых без блокировки. |
mark() | Помечает текущую позицию в потоке. |
reset() | Возвращает поток к последней отметке. |
skipBytes(int n) | Пропускает n байт. |
close() | Закрывает поток и освобождает ресурсы. |
Для глубокого изучения посетите официальную документацию Java.
java
- Ключевое слово final в Java: переменные, методы и классы
- Оператор instanceof в Java: полное руководство с примерами
- Наследование в Java: концепции, типы и практические примеры
- Статические вложенные классы в Java: использование, отличия и примеры
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Паттерн Singleton в Java: как реализовать и безопасно использовать
- Рефлексия в Java: инспекция классов, методов и полей во время выполнения
- Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
- Освоение Java Generics: создание переиспользуемого, типобезопасного кода
- Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление