IO5 - 序列化&反序列化

序列化与反序列化

  • 序列化:将对象转换为字节读取至文件中
  • 反序列化:将文件中的字节输出为对象

public class FileObject {
    public static void main(String[] args) throws Exception{

        //TODO IO 序列化&反序列化
        //     序列化:对象 -> 对象输出流(阀门) -> 文件输出流 -> 文件
        //     反序列化:文件 -> 文件输出流 -> 对象输出流 -> 文件

        //数据文件对象
        File dataFile = new File("E:\\.就业\\code\\day1\\IO_File\\object.dat");

        //序列化
        //TODO ObjectOutputStream 对象输出流(管道对象) -- 向前连接对象
        ObjectOutputStream objectOut = null;
        //TODO FileOutputStream 文件输出流(管道对象)   -- 向后连接文件
        FileOutputStream out = null;

        //反序列化
        //TODO FileInputStream 文件输入流(管道对象)   -- 向前连接文件
        FileInputStream in = null;
        //TODO ObjectInputStream 对象输入流(管道对象) -- 向后连接对象
        ObjectInputStream objectIn = null;

        try{
            //TODO 序列化
            out = new FileOutputStream(dataFile);     //设置文件输出管道的目的文件
            objectOut = new ObjectOutputStream(out);  //对象输出管道 输出到 文件输出管道

            //Java 只有增加了特殊标记的类,才能在写文件时序列化
            //特殊标记 -- 一个接口
            User user = new User();
            objectOut.writeObject(user);

            objectOut.flush(); //清空管道中的缓存

            //TODO 反序列化
            in = new FileInputStream(dataFile);
            objectIn = new ObjectInputStream(in);
            Object o = objectIn.readObject();
            System.out.println(o); //io.User@7530d0a

        }catch (Exception e){
            throw new RuntimeException(e);
        }finally {
            //TODO 关闭管道
            if(objectOut != null){
                try {
                    objectOut.close();
                }catch (IOException e){
                    throw new RuntimeException(e);
                }
            }
            //TODO 关闭管道
            if(objectIn != null){
                try {
                    objectIn.close();
                }catch (IOException e){
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

//implements Serializable 只有实现了Serializable接口的才能序列化
class User implements Serializable{

}
posted @ 2023-01-04 15:29  LaViez  阅读(81)  评论(0)    收藏  举报