Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Освоение Java ObjectOutputStream: сериализация, методы и практические примеры

Класс Java ObjectOutputStream

Класс ObjectOutputStream из пакета java.io позволяет записывать Java-объекты для последующего чтения через ObjectInputStream. Он расширяет OutputStream и является основой встроенного механизма сериализации Java.


Как работает ObjectOutputStream

При записи объекта в ObjectOutputStream фреймворк кодирует имя класса, значения полей и информацию о типах в бинарный формат — процесс, называемый сериализацией. Полученный байтовый поток можно сохранить в файл, передать по сети или разместить в памяти.

Важно: Только объекты, реализующие java.io.Serializable, могут быть сериализованы. Этот интерфейс-маркер сообщает среде выполнения, что объект безопасен для сохранения или передачи.


Создание ObjectOutputStream

Начните с импорта класса:

import java.io.ObjectOutputStream;

Затем свяжите его с FileOutputStream или любым другим OutputStream:


// Запись в файл "data.bin"
FileOutputStream fileStream = new FileOutputStream("data.bin");
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);

Теперь objStream готов сериализовать объекты в fileStream.


Ключевые методы ObjectOutputStream

Класс наследует набор методов от OutputStream и добавляет специализированные для работы с объектами:


Пример 1: Сериализация примитивов и строки

Полный фрагмент, записывающий int и String в файл, затем читающий их через ObjectInputStream:

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.bin");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeInt(data1);
            oos.writeObject(data2);
            oos.close();
            // Чтение объектов
            FileInputStream fis = new FileInputStream("file.bin");
            ObjectInputStream ois = new ObjectInputStream(fis);
            System.out.println("Integer data :" + ois.readInt());
            System.out.println("String data :" + ois.readObject());
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Вывод

Integer data :5
String data :This is programiz

Пример 2: Сериализация пользовательского объекта

Для сериализации пользовательского класса достаточно реализовать 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 dog1 = new Dog("Tyson", "Labrador");
        try {
            // Запись объекта
            FileOutputStream fos = new FileOutputStream("dog.bin");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(dog1);
            oos.close();
            // Чтение объекта
            FileInputStream fis = new FileInputStream("dog.bin");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Dog newDog = (Dog) ois.readObject();
            System.out.println("Dog Name: " + newDog.name);
            System.out.println("Dog Breed: " + newDog.breed);
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Вывод

Dog Name: Tyson
Dog Breed: Labrador

Класс Dog должен реализовывать Serializable, так как ObjectOutputStream может писать только сериализуемые объекты.


Дополнительные операции ObjectOutputStream

МетодОписание
flush()Сбрасывает буферизованные выходные байты в базовый поток.
drain()Сбрасывает буферизованные данные (доступно в Java 9+).
close()Закрывает поток и освобождает системные ресурсы.

Для глубокого изучения см. официальную документацию Java.

java

  1. Ключевое слово final в Java: переменные, методы и классы
  2. Оператор instanceof в Java: полное руководство с примерами
  3. Наследование в Java: концепции, типы и практические примеры
  4. Статические вложенные классы в Java: использование, отличия и примеры
  5. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  6. Паттерн Singleton в Java: как реализовать и безопасно использовать
  7. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  8. Мастерство Java ArrayList: операции, методы и лучшие практики
  9. Освоение Java Generics: создание переиспользуемого, типобезопасного кода
  10. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление