English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массивы

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Список (List)

Java Queue (очередь)

Java Map собрания

Java Set собрания

Java Ввод/Вывод (I/O)

Java Reader/Writer

Другие темы Java

Класс Java ObjectOutputStream

В этом руководстве мы будем изучать Java ObjectOutputStream и его методы с помощью примеров.

Класс ObjectOutputStream пакета java.io можно использовать для записи объектов, которые могут быть прочитаны ObjectInputStream.

Он наследует абстрактный класс OutputStream.

Принцип работы ObjectOutputStream

Основно, ObjectOutputStream кодирует Java объекты с использованием пар имен классов и значений объектов. Таким образом, генерируется соответствующий поток. Этот процесс называется сериализацией.

Эти преобразованные потоки могут храниться в файлах и передаваться через сеть.

ВниманиеКласс ObjectOutputStream записывает только те объекты, которые реализуют интерфейс Serializable. Это связано с тем, что объекты необходимо сериализовать при записи в поток.

Создание ObjectOutputStream

Чтобы создать поток вывода объектов,我们必须 сначала импортировать пакет java.io.ObjectOutputStream. После импорта пакета можно создавать поток вывода.

//Создание FileOutputStream, в который写入 объекты ObjectOutputStream
FileOutputStream fileStream = new FileOutputStream(String file);
//Создание ObjectOutputStream
ObjectOutputStream objStream = new ObjectOutputStream(fileStream);

В предыдущем примере мы создали объектный поток вывода objStream, который связан с потоком вывода файла fileStream.

Методы ObjectOutputStream

Класс ObjectOutputStream предоставляет реализацию различных методов,出现的 в классе OutputStream.

write() метод

  • write() -写入字节数据到输出 поток

  • writeBoolean() -写入布尔数据

  • writeChar() -写入字符数据

  • writeInt() -写入整数数据

  • writeObject() -写入对象到输出 поток

Пример 1: Java ObjectOutputStream

Давайте посмотрим, как использовать ObjectOutputStream для хранения объектов в файле и как использовать ObjectInputStream для чтения этих объектов из файла

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
class Main {
    public static void main(String[] args) {
        int data1 = 5;
        String data2 = "This is w3codebox";
        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            // Создание ObjectOutputStream
            ObjectOutputStream output = new ObjectOutputStream(file);
            // Запись объекта в поток вывода
            output.writeInt(data1);
            output.writeObject(data2);
            //Использование ObjectInputStream для чтения данных
            FileInputStream fileStream = new FileInputStream("file.txt");
            ObjectInputStream objStream = new ObjectInputStream(fileStream);
            System.out.println("Integer data: " + objStream.readInt());
            System.out.println("String data: " + objStream.readObject());
            output.close();
            objStream.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

Результат вывода

Integer data: 5
String data: This is w3codebox

В предыдущем примере мы использовали методы readInt() и readObject() для чтения целочисленных данных и объектов из файла.

Здесь мы используем ObjectOutputStream для записи данных в файл. Затем мы используем ObjectInputStream для чтения данных из файла.

Пример 2: Java ObjectOutputStream

Давайте рассмотрим еще один пример

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Dog implements Serializable {
    String name;
    String breed;
    public Dog(String name, String breed) {
        this.name = name;
        this.breed = breed;
    }
}
class Main {
    public static void main(String[] args) {
        // Создание объекта класса Dog
        Dog dog1 = new Dog("Тери", "Лабрадор-ретривер");
        try {
            FileOutputStream fileOut = new FileOutputStream("file.txt");
            // Создание ObjectOutputStream
            ObjectOutputStream objOut = new ObjectOutputStream(fileOut);
            // Запись объекта в поток вывода
            objOut.writeObject(dog1);
            // Чтение объекта
            FileInputStream fileIn = new FileInputStream("file.txt");
            ObjectInputStream objIn = new ObjectInputStream(fileIn);
            // Чтение объекта
            Dog newDog = (Dog) objIn.readObject();
            System.out.println("Имя собаки: " + newDog.name);
            System.out.println("Порода: " + newDog.breed);
            objOut.close();
            objIn.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

Результат вывода

Имя собаки: Тери
Порода: Лабрадор ретривер

В примере выше мы создали

  •  ObjectOutputStream objOut использует FileOutputStrea fileOut.

  •  ObjectInputStream objIn использует FileInputStream fileIn.

  • Объект класса Dog dog1.

Здесь мы затем используем поток объектного ввода для записи объекта в файл. И поток объектного ввода читает объекты из файла.

Внимание:Класс Dog реализует интерфейс Serializable. Это потому, что ObjectOutputStream пишет только объекты, которые можно сериализовать в поток вывода.

Другие методы ObjectOutputStream

МетодОписание содержимого
flush()Очистить все данные из потока вывода
drain()Вложить все буферизированные данные в поток вывода
close()Закрыть поток вывода