📜  Java.io.ObjectInputStream类(1)

📅  最后修改于: 2023-12-03 15:16:02.434000             🧑  作者: Mango

Java.io.ObjectInputStream类

Java.io.ObjectInputStream类是Java IO API中的一个类,主要用于将Java对象的字节流转换为Java对象实例。它继承自Java.io.InputStream类,并实现了Java.io.ObjectInput接口。

主要方法
  • public Object readObject() throws IOException, ClassNotFoundException: 读取一个Java对象,并转换为相应的实例。
  • public int read() throws IOException: 读取一个字节的数据。
  • public int read(byte[] b, int off, int len) throws IOException: 读取指定数量的字节的数据,并将其存储在给定的字节数组中。
  • public final void readFully(byte[] b) throws IOException: 读取一个字节数组,并将其填充。
  • public final void readFully(byte[] b, int off, int len): 在读取指定数量的字节前填充给定的字节数组。
  • public final Object readUnshared() throws IOException, ClassNotFoundException: 从输入流中读取一个新的“未共享”的对象。
  • protected Object resolveObject(Object obj): 如果需要,替换从流中读取的对象。
使用示例

以下示例展示了如何使用Java.io.ObjectInputStream类来读取Java对象的数据流,并将其转换为Java对象实例。

import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List;

public class ObjectInputStreamExample {

    public static void main(String[] args) throws Exception {
        // 创建ObjectInputStream
        FileInputStream fileInputStream = new FileInputStream("object.dat");
        ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);

        // 读取Java对象
        List<String> list = new ArrayList<>();
        list = (List<String>) objectInputStream.readObject();

        // 关闭ObjectInputStream
        objectInputStream.close();

        // 打印Java对象
        System.out.println(list.toString());
    }
}

在这个例子中,我们使用FileInputStream和ObjectInputStream创建一个输入流对象。我们然后使用readObject方法读取Java对象,并将其转换为ArrayList类型。最后,我们将其toString打印到控制台中。

注意事项
  1. 当从ObjectInputStream读取对象时,Java类加载器将尝试从类路径中查找该类的定义。
  2. ObjectInputStream只适用于将Java对象读取为字节流,并假定该对象是使用Java ObjectOutputStream编写的。
  3. 如果要从ObjectInputStream读取不同的对象,必须提供一个完全限定的类名作为输入流中的第一个条目。