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是属于类的,而不属于某个对象的)

  • 相关阅读:
    前端--HTML
    并发函数--线程
    并发编程--进程
    一个好用的网站,各种在线
    django Models与数据库关系
    流文件下载
    小白都能秒懂的各数据库在Django的配置
    关于django 内建缓存 信号 及自定义json的配置
    django批量创建数据
    关于drf的组件
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286698.html
Copyright © 2011-2022 走看看