Java ObjectOutputStream 类用法说明及实例

本教程通过示例介绍 Java ObjectOutputStream 类以及使用方法。

本教程通过示例介绍 Java ObjectOutputStream 类以及使用方法。

java.io 包的 ObjectOutputStream 类可用于序列化 Java 对象,序列化的对象可由 ObjectInputStream 读取。

ObjectOutputStream 类扩展了 OutputStream 抽象类。

ObjectOutputStream 类是 Java OutputStream 的子类
Java ObjectOutputStream 类

ObjectOutputStream 的原理

ObjectOutputStream 将 Java 对象转换为相应的流。这称为序列化。这些转换后的流可以存储在文件中或通过网络传输。

现在,如果我们需要读取这些对象,我们要使用 ObjectInputStream 将流转换回相应的对象。这称为反序列化。

! 注意ObjectOutputStream 只能序列化 Serializable 接口的实现类。

创建 ObjectOutputStream

以下代码展示了创建了将对象序列化并保存到文件中的 ObjectOutputStream 对象。

FileOutputStream fileStream = new FileOutputStream(String file);

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;

public class Main {
  public static void main(String[] args) {

    int data1 = 5;
    String data2 = "Hello World.";

    try {

      FileOutputStream file = new FileOutputStream("file.txt");

      // Creates an ObjectOutputStream
      ObjectOutputStream output = new ObjectOutputStream(file);

      // writes objects to output stream
      output.writeInt(data1);
      output.writeObject(data2);

      // Reads data using the 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: Hello World.

在上面的例子中,我们首先使用 ObjectOutputStream 将整数数据和对象数据写入文件,然后使用 ObjectInputStream 类的 readInt()readObject() 方法从文件中读取整数数据和对象数据。

示例 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;
  }
}

public class Main {
  public static void main(String[] args) {

    // Creates an object of Dog class
    Dog dog = new Dog("Tyson", "Labrador");

    try {
      FileOutputStream file = new FileOutputStream("file.txt");

      // Creates an ObjectOutputStream
      ObjectOutputStream output = new ObjectOutputStream(file);

      // Writes objects to the output stream
      output.writeObject(dog);

      FileInputStream fileStream = new FileInputStream("file.txt");

      // Creates an ObjectInputStream
      ObjectInputStream input = new ObjectInputStream(fileStream);

      // Reads the objects
      Dog newDog = (Dog) input.readObject();

      System.out.println("Dog Name: " + newDog.name);
      System.out.println("Dog Breed: " + newDog.breed);

      output.close();
      input.close();
    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}

输出

Dog Name: Tyson
Dog Breed: Labrador

在上面的例子中,我们创建了

  • 一个 Dog 对象
  • 一个 ObjectOutputStream 对象,它使用 FileOutputStream 对数据写入文件
  • 一个 ObjectInputStream 对象,它使用 FileInputStream 读取文件中的数据

! 注意Dog 类实现 Serializable 接口。这是因为 ObjectOutputStream 仅将可序列化 Serializable 接口的实现类。

ObjectOutputStream 的其他方法

| 方法 | 说明 | | flush() | 清除输出流中的所有数据 | | drain() | 将所有缓冲数据放入输出流 | | close() | 关闭输出流 |