IO流实现对象的序列化和反序列化

对象的序列化和反序列化


ObjectOutputStream:写出对象,实现序列化
ObjectInputStream:读取对象,实现反序列化

ObjectOutputStream 对象序列化

既然是保存对象,那么就需要一个实体类:Student
注:java有明确规定,要实现对象的虚化化和反序列化就必须实现Serializable接口,且实体类的成员变量不能使静态的。
代码如下:

import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Student(){}
    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;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }

}
  1. ObjectOutputStream构造方法:
    ObjectOutputStream(OutputStream out)传递任意的字节输出流对象

2.方法:writeObject(Object obj)实现对象的写出
返回值:void
传递一个实体类的对象
代码如下:


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectStream_Test {

    public static void main(String[] args) throws IOException {
        //实现对象的序列化
        Student student = new Student("张三",20);
        FileOutputStream fos = new FileOutputStream("D:\\student.txt");
        ObjectOutputStream outputStream = new ObjectOutputStream(fos);
        outputStream.writeObject(student);
        outputStream.close();
    }

}

ObjectInputStream 实现对象的反序列化

  1. ObjectInputStream构造方法:
    ObjectInputStream(InputStream in)
    传递任意的字节输入流对象,输入流封装的文件必须是序列化的文件
    1. 方法:readObject() 读取对象
      返回值:Object对象
    2. 注意:反序列化必须有对象的class文件的支持,如果没有class文件支持是找不到实体类的
      代码如下:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class ObjectStream_Test {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        /*//实现对象的序列化
        Student student= new Student("张三",20);
        FileOutputStream fos= new FileOutputStream("D:\\student.txt");
        ObjectOutputStream outputStream = new ObjectOutputStream(fos);
        outputStream.writeObject(student);
        outputStream.close();*/

        //实现对象的反序列化
        FileInputStream fis = new FileInputStream("D:\\student.txt");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object obj = ois.readObject();
        System.out.println(obj);
        ois.close();
    }

}

附:如果成员变量不想被序列化,可以在成员变量前加transient关键字,阻止成员变量被序列化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值