zoukankan      html  css  js  c++  java
  • java 序列化原来如此

    上次面试的时候 ,如何实现java 类的序列化,当时感觉这个问题很简单,我的回答是实现serizlizable 接口就好了,可以实现对象的持久化,看了看书,原来这样:
    
    
    public class Serialize implements Serializable{
    
        
        /**
         *  java 序列化 详解
         */
        private static final long serialVersionUID = 1L;
        
        private int num = 1390;
    
        public static void main(String[] args) {
            
            try {
                FileOutputStream fileOutputStream = new FileOutputStream("d:/serialize.dat");
                ObjectOutputStream oos = new ObjectOutputStream(fileOutputStream);
                Serialize s = new Serialize();
                oos.writeObject(s);
                oos.flush();
                oos.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
    }
    
    
    



    以上代码是输出实现了序列化的类到文件里,原来里面是这样的:




    第一部分就是序列化的开头:
    AC ED : 声明使用了序列化协议 。
    00 05: 序列化协议版本。
    73: 声明这是一个新的对象。
    第二部分是要序列化的类的描述,在这里是serialize类
    72 : 声明这里开始一个新的class
    00 17 : Class 名字的长度是17个字节。
    63...65 完整类名。
    第三部分: 属性描述
    第四部分: 父类描述
    第五部分:属性项目的实际值
    00 06 6E 则为1390的数值。

    当父类继承Serializable 接口时,所有子类都 可以被序列化。
    如果子类实现了,父类没有实现,父类中的属性不能序列化,不会报错,但数据会丢失。
    如果序列化的属性是对象,这个对象也必须实现Serializable接口,否则会报错。
    在序列化时,如果seralVersionUID被修改,那么反序列化时会失败。



  • 相关阅读:
    生成PDF文档
    2016 百度研发岗面试总结
    有趣的数
    2016阿里校招python研发面试
    python 快排,堆排,归并
    三种简单的排序写下贴上
    BestCoder Round #47 1003
    c++ 适配器
    微信公众平台-超级大赛问题汇总1
    正则表达式简单总结
  • 原文地址:https://www.cnblogs.com/shaoyu19900421/p/3821456.html
Copyright © 2011-2022 走看看