• Java的序列化机制


    1. 所有实现序列化的类都必须实现Serializable接口,序列化有如下两个特点:

    • 如果一个类可以被序列化,那么它的子类也可以被序列化
    • 由于static代表类成员,trasient代表对象的临时数据,因此被声名为这两种类型的数据成员是不能被序列话的

    2. 序列化和反序列化的实例

    package StreamLearn;
    
    import java.io.*;
    
    /**
     * Created by liujinhong on 2017/3/6.
     */
    
    /**
     * 序列化和返序列化实例
     */
    public class SerialObjectTest {
        public static void main(String[] args) {
            People p = new People();
            ObjectOutputStream oos = null;
            ObjectInputStream ois = null;
    
            //序列化
            try {
                FileOutputStream fos = new FileOutputStream("/Users/liujinhong/Desktop/test/ttt");
                oos = new ObjectOutputStream(fos);
    
                oos.writeObject(p);
            } catch (Exception e) {
                System.out.println(e);
            } finally {
    
            }
    
            //反序列化
            People p1;
            try {
                FileInputStream fis = new FileInputStream("/Users/liujinhong/Desktop/test/ttt");
                ois = new ObjectInputStream(fis);
    
                p1 = (People) ois.readObject();
    
                System.out.println(p1.a);
                System.out.println(p1.b);
                System.out.println(p1.book.id);
            } catch (Exception e) {
                System.out.println(e);
            } finally {
    
            }
        }
    }
    
    
    class People implements Serializable {
        public int a = 1;
        public transient int b = 2;
        public Book book = new Book();
    }
    
    class Book implements Serializable {
        public int id = 1;
    }

    3. 什么情况下需要使用序列化?

    • 通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中
    • 序列化能实现深复制,即可以复制引用的对象

    4. serialVersionUID作用?

    在序列化和反序列化的过程中,serialVersionUID起着非常重要的作用,每一个类都有一个特定的serialVersionUID,在反序列化的过程中通过serialVersionUID来判断类的兼容性。如果不兼容会跑出InvalidClassException异常。

    5. 自定义serialVersionUID的优点?

    • 提高程序运行效率
    • 提高程序在不同平台上的兼容性
    • 增强各个版本的可兼容性
  • 相关阅读:
    vim 多个文件切换
    Ruby 格式化代码 vim
    Ruby 配置vimrc
    print puts p
    开机跳过开机选择系统的选项界面
    Linux学习笔记:rm删除文件和文件夹
    Linux学习笔记:ps -ef、ps aux、kill -9
    Linux学习笔记:ctrl+z、ctrl+c、ctrl+d的区别
    Shell学习笔记:<<EOF子命令
    Linux学习笔记:crontab定时任务
  • 原文地址:https://www.cnblogs.com/liujinhong/p/6508801.html
Copyright © 2020-2023  润新知