• Java序列化有什么作用


    一、作用

    对java对象进行序列化之后,会变成字节码,这样就会比较方便在网络上进行传输,也可以在磁盘上进行存储。

    序列化:把Java对象转换为字节序列。
    反序列化:把字节序列恢复为原先的Java对象。

    二、为什么没有被序列化的对象,也能进行传输

    代码如下:

    public class DbmDB2Info {
    
    	//服务器信息
    	private Integer serverId;
    	private String serverName;
    	//主机信息
    	private String hostName;
    	private String hostIp;
    	private String osType;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    原因就是:在声明变量的时候,例如String、int、Boolean等时,数据类型已经实现了序列化
    可以看一下源码:String类型本身就已经实现了Serializable序列化接口

    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */
        private final char value[];
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、序列化的方式

    java对象需要进行序列化,可以实现下面两个接口中的一个:
    
    Serializable 接口
    Externalizable 接口
    
    • 1
    • 2
    • 3
    • 4

    1、Serializable 接口

    一个对象想要被序列化,那么它的类就要实现此接口或者它的子接口。

    这个对象的所有属性(包括private属性、包括其引用的对象)都可以被序列化和反序列化来保存、传递。

    不想序列化的字段可以使用transient修饰。

    由于Serializable对象完全以它存储的二进制位为基础来构造,因此并不会调用任何构造函数,因此Serializable类无需默认构造函数,但是当Serializable类的父类没有实现Serializable接口时,反序列化过程会调用父类的默认构造函数,因此该父类必需有默认构造函数,否则会抛异常。使用transient关键字阻止序列化虽然简单方便,但被它修饰的属性被完全隔离在序列化机制之外,导致了在反序列化时无法获取该属性的值,而通过在需要序列化的对象的Java类里加入writeObject()方法与readObject()方法可以控制如何序列化各属性,甚至完全不序列化某些属性或者加密序列化某些属性。

    2、Externalizable 接口

    它是Serializable接口的子类,用户要实现的writeExternal()和readExternal() 方法,用来决定如何序列化和反序列化。

    因为序列化和反序列化方法需要自己实现,因此可以指定序列化哪些属性,而transient在这里无效。

    对Externalizable对象反序列化时,会先调用类的无参构造方法,这是有别于默认反序列方式的。如果把类的不带参数的构造方法删除,或者把该构造方法的访问权限设置为private、默认或protected级别,会抛出java.io.InvalidException: no valid constructor异常,因此Externalizable对象必须有默认构造函数,而且必需是public的。

  • 相关阅读:
    ubuntu如何查看系统信息、cpu型号
    【软考 系统架构设计师】软件架构设计⑦ 构件与中间件技术
    Python爬虫编程思想(154):使用Scrapy处理登录页面
    第一个Spring程序
    【Leecode】代码随想录栈和队列篇day12(应用)
    java实现朴素rpc
    专业五月考自测
    vellum 学习03 10/7 (知识补)
    高并发项目-分布式Session解决方案
    day57 模型层中过滤器和数据库增删改查进阶
  • 原文地址:https://blog.csdn.net/weixin_43860634/article/details/126846869