当前位置: 首页 > news >正文

【Java】序列化与反序列化

1. 对象的序列化机制是什么?

对象序列化机制允许把内存中的Java对象转化成语平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。

当其他程序获取了这种二进制流,就可以恢复成原来的Java对象。

2. Java自定义类序列化要求:

  1. 自定义类需要实现接口:Serializable(标识接口:无任何属性或抽象方法),否则会报NotSerializableException 异常
  2. 要求自定义类声明一个全局常量:static long serialVersionUID = 42234234L;
    • 该常量必须是:static long 类型的,对权限修饰符没有要求
    • 该常量用于唯一标识该类,所以每个类的常量值都一样保持不一致
  3. 要求自定义类的各个属性也必须是可以序列化的:
    • 对于基本数据类型:默认就可以序列化,因为底层已经实现类了Serializable接口
    • 若某个属性是引用数据类型:那么这个属性所在类也要求实现Serializable接口

3. 注意点:

  1. 如果没有声明全局常量serialVersionUID,系统也会自动声明一个针对于当前类的serialVersionUID。
    但是,当此类发生任何修改,都会导致serialVersionUID被修改,进而导致反序列化时,出现InvalidClassException异常。
  2. 若某个属性不想被序列化,则该属性必须注明是瞬态的,使用transient关键字修饰。
  3. 静态(static)变量的值不会序列化。因为静态变量的值不属于某个对象 是属于类的。
http://www.lryc.cn/news/31367.html

相关文章:

  • 面向对象的使用
  • LPDDR4x 的 学习总结(3) - SDRAM基本功能
  • 设计模式(三)--适配器模式(Adapter Pattern)
  • Web服务器基础介绍与Apache的简单介绍(LAMP架构与搭建论坛)
  • Linux 进程:exec函数簇
  • 极简RSS订阅器Miniflux
  • 网络通信快速入门
  • 【阅读文档】Vue.js 2.0 之教程文档
  • Docker【基本使用】
  • 算法leetcode|39. 组合总和(rust重拳出击)
  • JavaSE学习笔记总结day18
  • HybridFusion: LiDAR和视觉交叉源点云融合
  • 走进JVM
  • C语言-基础了解-15-C函数指针与回调函数
  • react和vue在响应式上的不同理解
  • 多线程二 多线程了解与使用
  • 嵌入式 Linux 的僵尸进程是什么?
  • 【刷题笔记】笔记一
  • 浏览器主页被hao123劫持的解决方案
  • 华为OD机试题 - 热点网络统计(JavaScript)| 含代码编写思路
  • IT项目经理的自我修养手册
  • 2023年软考中级电子商务设计师考什么?
  • 现在的00后太强了,几个问题差点给我问懵了
  • $3 : 水​​​​​项目实战 - 水果库存系统
  • 毕业设计 基于STM32单片机无线ZIGBEE智能大棚土壤湿度光照检测
  • 华为OD机试真题Java实现【相对开音节】真题+解题思路+代码(20222023)
  • 【C++】30h速成C++从入门到精通(STL容器listvector)
  • 操作系统---存储管理
  • 华为OD机试题 - 好朋友(JavaScript)| 含思路
  • socket本地多进程通信基本使用方法和示例