English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы будем изучать Java ObjectOutputStream и его методы с помощью примеров.
Класс ObjectOutputStream пакета java.io можно использовать для записи объектов, которые могут быть прочитаны ObjectInputStream.
Он наследует абстрактный класс OutputStream.
Основно, ObjectOutputStream кодирует Java объекты с использованием пар имен классов и значений объектов. Таким образом, генерируется соответствующий поток. Этот процесс называется сериализацией.
Эти преобразованные потоки могут храниться в файлах и передаваться через сеть.
ВниманиеКласс ObjectOutputStream записывает только те объекты, которые реализуют интерфейс Serializable. Это связано с тем, что объекты необходимо сериализовать при записи в поток.
Чтобы создать поток вывода объектов,我们必须 сначала импортировать пакет java.io.ObjectOutputStream. После импорта пакета можно создавать поток вывода.
//Создание FileOutputStream, в который写入 объекты ObjectOutputStream FileOutputStream fileStream = new FileOutputStream(String file); //Создание ObjectOutputStream ObjectOutputStream objStream = new ObjectOutputStream(fileStream);
В предыдущем примере мы создали объектный поток вывода objStream, который связан с потоком вывода файла fileStream.
Класс ObjectOutputStream предоставляет реализацию различных методов,出现的 в классе OutputStream.
write() -写入字节数据到输出 поток
writeBoolean() -写入布尔数据
writeChar() -写入字符数据
writeInt() -写入整数数据
writeObject() -写入对象到输出 поток
Давайте посмотрим, как использовать 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 для чтения данных из файла.
Давайте рассмотрим еще один пример
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 пишет только объекты, которые можно сериализовать в поток вывода.
Метод | Описание содержимого |
---|---|
flush() | Очистить все данные из потока вывода |
drain() | Вложить все буферизированные данные в поток вывода |
close() | Закрыть поток вывода |