一、什么是序列化和反序列化

序列化:指把内存中的Java对象,通过某种方式存储到磁盘中或者传递给其他网络节点,通俗来说就是将对象转化为二进制串。

反序列化:把磁盘中的对象数据或者网络节点上的对象数据,恢复成Java对象模型的过程。通俗来说就是将序列化生成的二进制串转化为对象。

二、为什么要进行序列化

  1. 在分布式系统中,微服务之间进行数据传输,就得将对象转换为二进制形式。
  2. 服务器钝化:如果服务器发现某些对象好久没活动了,服务器会把这些内存中的对象持久化在磁盘中;如果服务器发现某些对象需要活动时,先去内存找,找不到再去磁盘文件中反序列化对象数据,恢复成Java对象。

三、如何进行序列化

  1. 需要做序列化的对象的类,必须实现序列化接口:java.lang.Serializable接口(这是一个标志接口,没有任何抽象方法),java中大多数类都实现了该接口:String,Integer,**同时要保证内部所有属性也必须是可序列化的,**也就是同样需要实现Serializable接口(默认情况下,基本数据类型本身可序列化)

  2. 底层会判断,如果当前类实现了Serializable,才允许做序列化,通过instance of Serializable 来判断。

  3. 在Java中使用对象流来完成序列化和反序列化。

    ObjectOutputStream:通过writeObject()方法做序列化操作

    ObjectInputStream:通过readObject()方法做反序列化操作

  4. 被序列化的对象除了需要实现Serializable接口外,还需要在内部定义一个全局常量serializableUID,这是每个类的序列化标识。在进行反序列化时,JVM会把传来的字节流中的serializableUID和本地相应类的serializableUID进行相比较,如果相同则认为是可以反序列化的,否则会抛异常。

  5. 如果类中没有显示定义serialiableUID,则会根据类的内部细节为其自动生成,如果修改的类的内部细节,则serializableUID就会发生变化。这样在修改类后进行反序列化时serializableUID不一致,导致反序列化失败,因此建议显式定义serializableUID。

  6. 关于IO流的详解请看这篇文章 一篇文章搞定IO流

示例:

public class Person implements Serializable {public static final long serialVersionUID = 43535635626L;}
ObjectOutputStream oos = null;
ObjectInputStream ois = null;try {//写对象oos = new ObjectOutputStream(new FileOutputStream("src\\object.data"));oos.writeObject(new String("我爱中国"));oos.writeObject(new Person());oos.flush();//读对象ois = new ObjectInputStream(new FileInputStream("src\\object.data"));String str = (String) ois.readObject();Person person = (Person) ois.readObject();System.out.println(str);System.out.println(person);} catch (Exception e) {e.printStackTrace();
} finally {if(oos != null){try {oos.close();} catch (IOException e) {e.printStackTrace();}}if(ois != null){try {ois.close();} catch (IOException e) {e.printStackTrace();}}
}

Java篇 之 序列化与反序列化相关推荐

  1. fileinputstream自定义类序列化和反序列化_Rest Assured篇:Java中的序列化和反序列化...

    点击上方蓝字设为星标 每天傍晚伴你一起成长! Java 中的序列化和反序列化是一个重要的编程概念.它适用于所有主要的编程语言.在本章中,我们将尝试在Java语言的上下文中理解此概念.在本章的最后,我们 ...

  2. Java对象的序列化与反序列化

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如文件或是内存缓冲区等.在网络传输过程中,可以是字节或是 ...

  3. java对象的序列化和反序列化详细解释

    java对象的序列化和反序列化是什么意思 1.序列化是干啥用的? 序列化的原本意图是希望对一个Java对象作一下"变换",变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结 ...

  4. 反序列化对象列表发生异常_面试官:你知道Java对象的序列化与反序列化背后的原理吗?...

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...

  5. Java对象的序列化和反序列化

    [感谢]孤傲苍狼的 Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化.可以对流化后的对象进行 ...

  6. JAVA中JSON序列化和反序列化

    JAVA中JSON序列化和反序列化 1 FASTJSON的序列化和反序列化 1.1 主函数 1.2 自定义对象 2 GSON序列化和反序列化 2.1 主函数 2.2 自定义对象 总结 不同包序列化和反 ...

  7. Java IO篇:序列化与反序列化

    1.什么是序列化: 两个服务之间要传输一个数据对象,就需要将对象转换成二进制流,通过网络传输到对方服务,再转换成对象,供服务方法调用.这个编码和解码的过程称之为序列化和反序列化.所以序列化就是把 Ja ...

  8. 一文带你全面了解java对象的序列化和反序列化

    本文分享自华为云社区<java中什么是序列化和反序列化?>,原文作者:dayu_dls . 这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍 ...

  9. K:java中的序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?以下内容将围绕这些问题进行展开讨论. Java序列化与反序列化 简单来说Java序列化是指把Java对象转 ...

最新文章

  1. Parser Generator Tips翻译(中英对译) by Joshua Xu
  2. OpenCV4.5.x DNN + YOLOv5 C++推理
  3. vux 实现多栏滚动
  4. ML之Hog_HammingDistance:基于Hog特征提取“RGB”图像的768个值的单向vector利用汉明距离算法进行判别
  5. Python Django HttpResponse响应json数据
  6. 去除inline-block间隙的几种方法
  7. resharper license server
  8. 战地2服务器怎么虚拟人数,战地2怎么修改作战人数?
  9. [转载] Docker网络原则入门:EXPOSE,-p,-P,-link
  10. JavaScript--动态添加元素
  11. php监考,科学网—监考与被监考 - 张珑的博文
  12. python-函数入门(二)
  13. redis集群介绍和搭建 (3个主机,6个实例)
  14. [AGC004E] Salvage Robots (DP)
  15. 海乐网站查询工具tool.sealee.com上线
  16. sql基本的日期函数
  17. 中国石油大学(北京)-《 油气藏经营管理》第二阶段在线作业
  18. “那些看似不起波澜的日复一日,终会在某天让你看到坚持的意义。”
  19. 基于Python3的科学运算与常用算法-第1,2章
  20. dubbo检测本机IP地址错误

热门文章

  1. with grant option与with admin option区别
  2. 我2022年的减肥计划 赛乐赛没效果是真是假
  3. Arduino教程五—步进电机
  4. 「CCO 2017」专业网络
  5. IDRAC创建虚拟磁盘
  6. C语言两个整型代替小数,从头一起学c语言(五)
  7. 【SQLServer】127个SQL server热门资料汇总
  8. 未知标记 html问题,显示错误:未知的HTML标记_phpstorm_开发99编程知识库
  9. 开源APM应用性能管理工具调研
  10. Escaping closure captures non-escaping parameter ‘xx‘