跳到主要内容

Java ObjectOutputStream 类

提示
  1. ObjectOutputStream 类:Java 的 ObjectOutputStream 类用于序列化对象,即将对象转换为字节流以便存储或传输。
  2. 序列化和兼容性ObjectOutputStream 仅适用于实现了 Serializable 接口的对象,确保了对象可以被安全地序列化和反序列化。
  3. 主要方法ObjectOutputStream 提供了多种方法,包括 writeObject() 用于写入对象,以及 writeInt(), writeChar(), flush(), 和 close() 等,用于管理和处理数据流。

java.io 包中的 ObjectOutputStream 类可用于写入可由 ObjectInputStream 读取的对象。

它扩展了 OutputStream 抽象类。

ObjectOutputStream 类继承自 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 mashangxue123";

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 mashangxue123

在上面的例子中,我们使用了 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("Tyson", "Labrador");

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("Dog Name: " + newDog.name);
System.out.println("Dog Breed: " + newDog.breed);

objOut.close();
objIn.close();
}

catch (Exception e) {
e.getStackTrace();
}
}
}

输出

Dog Name: Tyson
Dog Breed: Labrador

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

  • 名为 objOutObjectOutputStream,使用名为 fileOutFileOutputStream
  • 名为 objInObjectInputStream,使用名为 fileInFileInputStream
  • Dog 类的对象 dog1

这里,我们随后使用对象输出流将对象写入文件。并使用对象输入流从文件中读取对象。

注意Dog 类实现了 Serializable 接口。这是因为 ObjectOutputStream 只能将可以序列化的对象写入输出流。

ObjectOutputStream 的其他方法

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

要了解更多,请访问 Java ObjectOutputStream(官方 Java 文档)