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 ObjectInputStream

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

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

он производит абстрактный класс InputStream.

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

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

ObjectInputStream主要用于 чтение данных, записанных ObjectOutputStream.

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

Теперь, если нужно читать эти объекты, то используется ObjectInputStream, который преобразует поток в соответствующий объект. Это называется десериализацией.

Создание ObjectInputStream

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

//Создание потока ввода файлов, связанного с указанным файлом
FileInputStream fileStream = new FileInputStream(String file);
//Создание объекта ввода потока файлов
ObjectInputStream objStream = new ObjectInputStream(fileStream);

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

Теперь objStream может использовать объект для чтения файла.

Методы ObjectInputStream

Класс ObjectInputStream предоставляет реализацию различных методов, существующих в классе InputStream.

Метод read()

  • read() - Чтение одного байта данных из вводного потока

  • readBoolean() - Чтение данных в виде логического значения

  • readChar() - Чтение данных в виде символа

  • readInt() - Чтение данных в виде целого числа

  • readObject() - Чтение объекта из вводного потока

Пример 1: Java ObjectInputStream

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

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 output = new ObjectOutputStream(file);
            //Использование ObjectOutputStream для записи в файл
            output.writeInt(data1);
            output.writeObject(data2);
            FileInputStream fileStream = new FileInputStream("file.txt");
            //Создание объекта ввода
            ObjectInputStream objStream = new ObjectInputStream(fileStream);
            //Использование метода readInt()
            System.out.println("Целочисленные данные: " + objStream.readInt());
            //Использование метода readObject()
            System.out.println("Строка данных: " + objStream.readObject());
            output.close();
            objStream.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

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

Целочисленные данные: 5
Строка данных: This is w3codebox

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

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

Пример 2: Java ObjectInputStream

Давайте посмотрим на другой реальный пример:

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 dog = new Dog("Tyson", "Labrador");
        try {
            FileOutputStream file = new FileOutputStream("file.txt");
            //Создание ObjectOutputStream
            ObjectOutputStream output = new ObjectOutputStream(file);
            //Запись объекта в поток вывода
            output.writeObject(dog);
            FileInputStream fileStream = new FileInputStream("file.txt");
            //Создание ObjectInputStream
            ObjectInputStream input = new ObjectInputStream(fileStream);
            //Чтение объекта
            Dog newDog = (Dog) input.readObject();
            System.out.println("Имя собаки: " + newDog.name);
            System.out.println("Породы: " + newDog.breed);
            output.close();
            input.close();
        }
        catch (Exception e) {
            e.getStackTrace();
        }
    }
}

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

Имя собаки: Tyson
Породы: Labrador

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

  •  ObjectOutputStream использует FileOutputStream,命名为 file, для вывода

  •  ObjectInputStream использует FileInputStream,命名为 fileStream, для ввода

  • Объект класса Dog dog

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

ВниманиеВнимание, в данном случае мы используем ObjectOutputStream для записи объекта в файл. А ObjectInputStream читает объект из файла.

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

методописание содержимого
available()возврат количества доступных байт в вводном потоке
mark()маркирование位置的 уже считанных данных в вводном потоке
reset()возврат контроллера к точке в вводном потоке, в которой был установлен маркер
skipBytes()пропуск и отбрасывание указанного количества байт из вводного потока
close()закрытие объекта вводного потока