【Java I/O 流】对象流:ObjectInputStream 和 ObjectOutputStream

简介: 对象流有两个类:ObjectOutputStream 和 ObjectInputStream,其主要作用是将 Java 对象序列化为流数据,或将流数据反序列化为 Java 对象。

在这里插入图片描述

❤️ 个人主页: 水滴技术
🚀 支持水滴: 点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏: Java 教程:从入门到精通

大家好,我是水滴~~

对象流有两个类:ObjectOutputStream 和 ObjectInputStream,其主要作用是将 Java 对象序列化为流数据,或将流数据反序列化为 Java 对象。

下面一起来看这两个类的详细介绍:

ObjectOutputStream(序列化流)

java.io.ObjectOutputStream 称为序列化流,它可以将 Java 对象序列化为流数据。该类继承了 java.io.OutputStream,是一个处理流。

构造函数

该类有一个构造方法,因为它是一个处理流,所以需要一个节点流对象。

ObjectOutputStream(OutputStream out)

通过一个节点流,创建一个序列化流 ObjectOutputStream 对象。

常用方法

因为该类继承了 java.io.OutputStream 类,所以常用的一些写入方法都可以使用,这里只介绍一个特有的方法:

void writeObject(Object obj)

将指定的对象写入 ObjectOutputStream。写入对象的类,必须实现 java.io.Serializable 接口,否则会报 java.io.NotSerializableException 异常。

代码示例

该示例将一个对象进行序列化,并输出到指定文件中。

首先,创建一个 Person 实体类,并实现 java.io.Serializable 接口:

public class Person implements Serializable {

    /**
     * 姓名
     */
    private String name;
    /**
     * 年龄
     */
    private Integer age;

    public Person() {
    }

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

然后,使用 ObjectOutputStream 对 Person 类进行序列化,并输出到指定文件:

// 实例化一个 Person 对象
Person person = new Person("杨过", 28);

// 通过 FileOutputStream 创建一个 ObjectOutputStream 实例
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c:/io/14_1.txt"));
// 将 Person 对象写入流中
oos.writeObject(person);
// 关闭流并释放资源
oos.close();

执行该代码后,会输出一个 c:/io/14_1.txt 文件,文件内容:
在这里插入图片描述

ObjectInputStream(反序列化流)

java.io.ObjectInputStream 称为反序列化流,它可以将流数据反序列化为 Java 对象。该类继承了 java.io.InputStream,是一个处理流。

构造函数

该类有一个构造方法,因为它是一个处理流,所以需要一个节点流对象。

ObjectInputStream(InputStream in)

通过一个节点流,创建一个反序列化流 ObjectInputStream 对象。

常用方法

因为该类继承了 java.io.InputStream 类,所以常用的一些读取方法都可以使用,这里只介绍一个特有的方法:

Object readObject()

从 ObjectInputStream 中读取一个对象。从流中读取的对象,要求其类必须存在,并且实现了 java.io.Serializable 接口。

代码示例

该代码示例读取上面示例中序列化的数据,并将其返序列化成对象。

读取 c:/io/14_1.txt 的内容,并反序列化。

// 通过 FileInputStream 实例来创建一个 ObjectInputStream 实例
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c:/io/14_1.txt"));
// 读取对象
Object o = ois.readObject();
// 关闭流并释放资源
ois.close();
// 打印对象
System.out.println(o.toString());

输出结果:

Person{name='杨过', age=28}

系列文章

🔥 【Java I/O 流】文件的操作——java.io.File 类详解

🔥 【Java I/O 流】I/O 流的原理与流的分类

🔥 【Java I/O 流】字节输入输出流:InputStream & OutputStream

🔥 【Java I/O 流】文件字节输入输出流:FileInputStream & FileOutputStream(文件读写案例)

🔥 【Java I/O 流】字符输入输出流:Reader 和 Writer

🔥 【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter

🔥 【Java I/O 流】字节缓冲流:BufferedInputStream 和 BufferedOutputStream

🔥 【Java I/O 流】字符缓冲流:BuffreadReader 和 BufferedWriter

🔥 【Java I/O 流】字节数组流:ByteArrayInputStream 和 ByteArrayOutputStream

🔥 【Java I/O 流】数据输入输出流:DataInputStream 和 DataOutputStream

热门专栏

👍 《Java 教程:从入门到精通

👍 《MySQL 教程:从入门到精通

在这里插入图片描述

相关文章
|
5天前
|
存储 Java
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
这篇文章介绍了Java中ObjectInputStream和ObjectOutputStream类的基本使用,这两个类用于实现对象的序列化和反序列化。文章解释了序列化的概念、如何通过实现Serializable接口来实现序列化,以及如何使用transient关键字标记不需要序列化的属性。接着,通过示例代码演示了如何使用ObjectOutputStream进行对象的序列化和ObjectInputStream进行反序列化。
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
|
5月前
|
存储 自然语言处理 Java
java缓冲流、转换流、序列化流、打印流
java缓冲流、转换流、序列化流、打印流介绍
|
5月前
|
缓存 Java
java中FileOutputStream流的学习
java中FileOutputStream流的学习
44 0
|
5月前
|
移动开发 Java Linux
【IO】JavaIO流:字节流、字符流、缓冲流、转换流、序列化流等
【IO】JavaIO流:字节流、字符流、缓冲流、转换流、序列化流等
51 0
|
Java
Java IO流--对象流ObjectInputStream和ObjectOutputStream及对象序列化机制的理解
Java IO流--对象流ObjectInputStream和ObjectOutputStream及对象序列化机制的理解
67 0
|
存储 Java 关系型数据库
【Java I/O 流】字节数组流:ByteArrayInputStream 和 ByteArrayOutputStream
今天的主题是字节数组流,即`ByteArrayInputStream` 和 `ByteArrayOutputStream`。这两个流主要用于字节数组与流之前的转换。
259 0
|
Java 关系型数据库 MySQL
【Java I/O 流】数据输入输出流:DataInputStream 和 DataOutputStream
数据流与要是将 Java 的基础数据类型读取或写入流中,它有如下特点: > 数据流是一个处理流,它必须套接在节点流之上。 数据流在读取和写入时的顺序要一致。否则,读取的数据会失真,造成乱码。
451 0
|
Java API
Java-IO流之缓冲流
为了提高数据读写的速度,Java API提供了带缓冲功能的流类,在使用这些流类时,会创建一个内部缓冲区数组,缺省使用8192个字节(8Kb)的缓冲区。
115 0
|
缓存 Java
Java IO流 - 缓冲流的详细使用介绍
缓冲流也称为高效流、或者高级流。之前学习的字节流和字符流可以称为原始流。 作用:缓冲流自带缓冲区、可以提高原始字节流、字符流读写数据的性能
下一篇
无影云桌面