演示ObjectOutStream(序列化)和ObjectInputStream(反序列化)的使用

  • 序列化
package com.io.outputstream_;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

/**
 * 演示ObjectOutStream的使用
 */
public class ObjectOutStream_ {
    public static void main(String[] args)throws Exception {
        //序列化后,保存的文件格式,不是保存文本,而是按照它的格式来保存
        String filePath="d:\\data.dat";

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));
        //序列化数据到d:\data.dat
        oos.write(100);//(自动装箱)int->Integer(实现了Serializable,因为Integer的父类是Number,而Number实现了Serializable接口)
        oos.writeBoolean(true);//(自动装箱)boolean->Boolean(实现了Serializable)
        oos.writeChar('a');//char->Character(实现了Serializable)
        oos.writeDouble(9.5);//double->Double(实现了Serializable)
        oos.writeUTF("沐晴学习");//String(实现了Serializable)
        //保存一个dog对象
        oos.writeObject(new Dog("旺财",10));

        oos.close();
        System.out.println("数据保存完毕(序列化形式)");

    }
}
//如果需要序列化某个类的对象,实现Serializable接口
class Dog implements Serializable {
    private String name;
    private int age;
    public Dog(String name,int age){
        this.name=name;
        this.age=age;

    }
}

 

  • 反序列化
package com.io.inputstream_;

import jdk.swing.interop.SwingInterOpUtils;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

/**
 * ObjectInputStream的使用
 */

public class ObjectInputStream_ {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
    //指定反序列化文件
        String filePath="d:\\data.dat";
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));

        //读取
        //注:读取(反序列化)的顺序需要和你保存数据(序列化)的顺序一致

        System.out.println(ois.readInt());
        System.out.println(ois.readBoolean());
        System.out.println(ois.readChar());
        System.out.println(ois.readDouble());
        System.out.println(ois.readUTF());
        Object dog = ois.readObject();
        System.out.println("运行类型="+dog.getClass());
        System.out.println("狗的信息"+dog);//底层会把Object——>Dog
        //关闭流,关闭外层流即可,底层流会自动关闭
        ois.close();

    }
}

 

posted @ 2022-05-03 11:50  胖虎9  阅读(56)  评论(0编辑  收藏  举报