❤️ 个人主页:水滴技术
🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬
🌸 订阅专栏:Java 教程:从入门到精通
大家好,我是水滴~~
对象流有两个类:ObjectOutputStream 和 ObjectInputStream,其主要作用是将 Java 对象序列化为流数据,或将流数据反序列化为 Java 对象。
下面一起来看这两个类的详细介绍:
java.io.ObjectOutputStream
称为序列化流,它可以将 Java 对象序列化为流数据。该类继承了java.io.OutputStream
,是一个处理流。
该类有一个构造方法,因为它是一个处理流,所以需要一个节点流对象。
通过一个节点流,创建一个序列化流 ObjectOutputStream 对象。
因为该类继承了 java.io.OutputStream
类,所以常用的一些写入方法都可以使用,这里只介绍一个特有的方法:
将指定的对象写入 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
文件,文件内容:
java.io.ObjectInputStream
称为反序列化流,它可以将流数据反序列化为 Java 对象。该类继承了java.io.InputStream
,是一个处理流。
该类有一个构造方法,因为它是一个处理流,所以需要一个节点流对象。
通过一个节点流,创建一个反序列化流 ObjectInputStream 对象。
因为该类继承了 java.io.InputStream
类,所以常用的一些读取方法都可以使用,这里只介绍一个特有的方法:
从 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 流】字节输入输出流: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
👍 《IDEA 教程:从入门到精通》
👍 《Java 教程:从入门到精通》
👍 《MySQL 教程:从入门到精通》