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 @   LaViez  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
点击右上角即可分享
微信分享提示