io流-序列化和反序列化

序列化和反序列化概述

java提供了一种对象序列化的机制 用一个字节序列可以表示一个对象 该字节序列包含该对象的数据、对象的类型和对象中存储的属性等信息 字节序列写出到文件之后 相当于文件中持久保存一个对象的信息

反之 该字节序列还可以从文件中读取回来 重构对象 对它进行反序列化 对象的数据、对象类型和对象中存储的数据信息 都可以用来在内存中创建对象

图解:

 

 对象序列化流_ObjectOutputStream

ObjectOutputStream:对象的序列化

作用:把对象以流的方式写入到文件中保存

构造方法:

ObjectOutputStream(OutputStream out):创建写入指定OutputStream的ObjectOutpuStream

参数:

OubputStream:字节输出流

特有的成员方法:

void writeObject(Object obj):将指定的对象写入ObjectOutputStream

使用步骤:

1.创建ObjectOutputStream对象 构造方法中传递字节输出流

2.使用ObjectOutputStream对象中的方法WriteObject 把对象写入到文件中

3.释放资源

代码

复制代码
实体类
/**
 * 当我们要使用序列化时 实体类必须实现这个接口Serializable
 */
public class Person implements Serializable {
    private String name;
    private int age;

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

    public Person() {
    }

    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 "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
测试类:
 public static void main(String[] args) throws IOException {
        Person p = new Person("张三", 18);
        ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("E:\\file\\序列化.txt"));

        os.writeObject(p);

        os.close();

    }
复制代码

运行前:

 

 运行结果:

 

 运行后:

 

 序列化.txt

 

 对象反序列化流_ObjectInputStream

ObjectInputStream反序列化流 将之前使用ObjectOutputStream序列化的原始数据恢复为对象

作用:把文件中保存的对象 以流的方式读取出来使用

构造方法:

ObjectInputStream(InputStream in):创建从指定InputStream读取的ObjectInputStream

参数:

inputSteam in:字节输入流

特有的成员方法:

Object readObject():从ObjectInputStream读取对象

使用步骤:

1.创建ObjectInputStream对象 构造方法中传递字节输入流

2.使用ObjectInputStream对象中的方法readObject读取保存对象的文件

3.释放资源

4.使用读取出来的对象(打印)

代码

复制代码
  public static void main(String[] args) throws IOException, ClassNotFoundException {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\file\\序列化.txt"));

        Object o = ois.readObject();

        ois.close();
        /*
        反序列化使用前提
        1.类必须实现Serializable
        2.必须存在类对象的class文件
         */
        System.out.println(o);
    }
复制代码

运行结果:

 Person{name='张三', age=18}

posted @   baimingze  阅读(71)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示