大家好,我是Java进阶者。
前言
本文主要学习ObjectInputStream类实现对象的反序列,ObjectOutputStream类实现对象的序列化流,接下来小编带大家一起来学习!
一、 ObjectInputStream类
ObjectInputStream是对象的反序列化流,它是InputStream类的子类。
ObjectInputStream类的构造方法
public ObjectInputStream(InputStream in):创建指定的输入流对象读取ObjectInputStream。参数in表示指定的输入流对象。
例子:
- FileInputStream fs=new FileInputStream("test.txt");
- ObjectInputStream os=new ObjectInputStream(fs);
使用ObjectInputStream类实现对象的反序列化例子
- import java.io.*;
-
- class Person implements Serializable{
- // 实现序列化接口
- private String id,name;
- private int age;
- //构造方法
- public Person(String id,String name, int age) {
- this.id = id;
- this.name = name;
- this.age = age;
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- }
- public class P18{
- public static void main(String[] args) throws Exception {
- //创建文件输入流对象,读取指定的文件
- FileInputStream fs=new FileInputStream("text/test");
- //创建对象输入流
- ObjectInputStream os=new ObjectInputStream(fs);
- //读取Person对象
- Person p=(Person)os.readObject();
- System.out.println("读取文本的数据后显示:");
- System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
- }
- }
运行的结果如下图所示:
从上面的代码中因为Person类中属性的私有的,使用访问器的方法set和get的方法,当调用ObjectInputStream的readObject()方法把text目录下的test的Person对象数据读取出来,这个就是反序列化。
二、ObjectOutputStream类
ObjectOutputStream是对象的序列化流,它是OutputStream类的子类。
ObjectOutputStream类的构造方法
public ObjectOutputStream(OutputStream out):创建指定的输出流对象写入ObjectOutputStream。参数out表示指定的输出流对象。
例子:
- FileOutputStream fs=new FileOutputStream("test.txt");
- ObjectOutputStream os=new ObjectOutputStream(fs);
对象输出流使用writeObject(Object obj)方法将一个对象obj写入到一个文件,对象输入流使用readObject()方法从源中读取一个对象到程序中。
使用ObjectOutputStream类实现对象的序列化例子
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
-
- public class Person implements Serializable{
- // 实现序列化接口
- private String id,name;
- private int age;
- //构造方法
- public Person(String id,String name, int age) {
- this.id = id;
- this.name = name;
- this.age = age;
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
- public static void main(String[] args) throws IOException {
- //创建一个Person对象
- Person p=new Person("C01","进阶者",18);
- System.out.println("写入文件前的数据:");
- System.out.println("id="+p.getId()+"\tname="+p.getName()+"\tage="+p.getAge());
- //创建文件输出流对象,把数据写入text目录下的test.txt文件中
- FileOutputStream fs=new FileOutputStream("text/test.txt");
- //创建对象输出流
- ObjectOutputStream os=new ObjectOutputStream(fs);
- os.writeObject(p);
- }
- }
运行的结果如下图所示:
从上面的代码中,首先是对Person对象进行实例化,它的id为c01,name为进阶者,年龄为18。当调用ObjectOutputStream的writeObject()方法将Person对象写入text目录下的test.txt。这就实现了序列化!
三、总结
本文主要介绍了ObjectInputStream类、ObjectOutputStream类。ObjectInputStream类是对象的反序列化流,它是InputStream类的子类,介绍了它的构造方法和方法,通过一个例子来学习使用ObjectInputStream类实现对象的反序列化。ObjectOutputStream类是是对象的序列化流,它是OutputStream类的子类,通过一个例子来学习使用ObjectOutputStream类实现对象的序列化。希望大家通过本文的学习,对你有所帮助!