zoukankan      html  css  js  c++  java
  • 【深入Java基础】序列化和反序列化

    序列化对象

    Java中的对象是伴随jvm而存在的,当虚拟机运行结束后,这些对象也随即被释放,当我们需要将这些对象保存时,就需要序列化这些对象(保存为文件存在磁盘上)

    要实现序列化,则需要类实现Serializable接口。

    如下,C类实现了Serializable接口,则这个类是可序列化的。

            class C implements Serializable{
                private int a;
                private String b;
    
                public int getA() {
                    return a;
                }
    
                public void setA(int a) {
                    this.a = a;
                }
    
                public String getB() {
                    return b;
                }
    
                public void setB(String b) {
                    this.b = b;
                }
    
            }

    利用ObjectOutputStream序列化对象c:

        public static void main(String[] agrs) throws IOException {
            C c = new C();
            c.setA(1);
            c.setB("哈哈哈");
            File file = new File("C:\Users\Administrator\Desktop\C.out");
            FileOutputStream fo = new FileOutputStream(file);
            ObjectOutputStream oos = new ObjectOutputStream(fo);
            oos.writeObject(c);
            oos.close();
         }

    这样在指定路径下就保存了这个对象。其中c.out的后缀名可以任意。

    反序列化

    序列化将对象保存在磁盘上,而反序列化则可以从磁盘读取一个文件将它转化为对象。当然这个文件是需要由序列化方式得到的。

        public static void main(String[] agrs) throws IOException, ClassNotFoundException {
            FileInputStream fi = new FileInputStream(file);
            ObjectInputStream ooi = new ObjectInputStream(fi);
            C cc = (C)ooi.readObject();
            System.out.println(cc.getB());
        }

    输出结果:

    1
    哈哈哈
    

    这样就将一个文件转化为了一个对象。

    什么时候需要序列化?

    序列化将对象以二进制的形式保存在文件中,可以在网络中传输这个对象,所以可以用于远程方法调用(RMI)

    序列化之transient关键字

    在序列化的或称中,如果成员变量中有List、map等集合对象,则在序列化的时候也会对集合内的对象进行序列化,导致效率低下,若我们不需要序列化某个成员变量,则只需要加上transient关键字即可。(另外用static修饰的变量也是不参与序列化的,因为static是属于类的,而不属于某个对象的)

  • 相关阅读:
    Java并发指南3:并发三大问题与volatile关键字,CAS操作
    Java并发指南2:深入理解Java内存模型JMM
    Java并发指南1:并发基础与Java多线程
    Java集合详解8:Java集合类细节精讲,细节决定成败
    Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同
    Java集合详解6:这次,从头到尾带你解读Java中的红黑树
    IP电话的配置
    孤立账户
    服务器维护知识
    VB学习一
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286698.html
Copyright © 2011-2022 走看看