JAVA bean为何要实现序列化
简而言之:序列化,就是为了在不同时间或不同平台的JVM之间共享实例对象。即序列化出于两个原因:①、用于持久化到磁盘上;②、用于作为数据流在网络上传输。
所谓的Serializable,就是java提供的通用数据保存和读取的接口。至于从什么地方读出来和保存到哪里去,都被隐藏在函数参数的背后了。这样,任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。这样极大的简化了类的设计。只要设计一个保存一个读取功能就能解决上面说的所有问题。
java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成一组byte,这样日后要用这个对象时候,你就能把这些byte数据恢复出来,并据此重新构建那个对象了。
工作流当中流程变量的几种数据类型:string integer short long double boolean date binary serializable,这就是为什么要将JAVA bean实现序列化的原因,因为你将对象设置到流程变量中必须要实现序列化,否则会在设置流程变量的时候报错找不到该类型。
java对象序列化机制就是把内存中的Java对象(User之类的JavaBean)转换成二进制流。java对象序列化后可以很方便的存储或者在网络中传输。Java的序列化机制是通过运行时判断类的序列化ID(serialVersionUID)来判定版本的一致性。在反序列化时,java虚拟机会通过二进制流中的serialVersionUID与本地的对应的实体类进行比较,如果相同就认为是一致的,可以进行反序列化,正确获得信息,否则抛出序列化版本不一致的异常。所以涉及到数据传输或者存储的类,严格意义上来说都要加上序列化ID,这也是一种良好的编程习惯。
注:
1、在序列化对象时,不仅会序列化当前对象本身,还会对该对象引用的其它对象也进行序列化,如此引用传递序列化。如果一个对象包含的成员变量是容器类等并深层引用,那么序列化过程开销也较大。
2、当字段被声明为 transient 后,默认序列化机制就会忽略该字段。(还有方法就是自定义writeObject方法,见下代码示例)
3、在单例类中添加一个readResolve()方法(直接返回单例对象),以保证在序列化过程仍保持单例特性。
最新文章
- Finder Item脚本如何包装成 Mac App
- iOS:xCode7版本运行xCode8.0的代码
- Linux磁盘管理之创建磁盘分区05
- codevs1958 刺激
- [转]Eclipse工具使用技巧总结
- python 常用数据结构使用
- 【每天一道算法题】Numeric Keypad
- R语法学习 第十二篇:因子
- 可持久化线段树——区间更新hdu4348
- android dialog设置全屏半透明背景色
- Eclipse4.8.0的svn插件离线安装说明
- Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)
- Kindeditor视频上传问题处理
- Vuex之理解Getters的用法
- 24. Swap Nodes in Pairs 链表每2个点翻转一次
- Activity回传值报错:Failure delivering result ResultInfo{who=null,request=7,result = 0,data=null}
- HTML5 FileReader实现图片上传前预览
- 样条之拉格朗日Lagrange(一元全区间)插值函数
- java ssm 后台框架平台 项目源码 websocket即时聊天发图片文字 好友群组 SSM源码
- FILTER:progid:DXImageTransform.Microsoft.Gradient使用
热门文章
- JavaScript校验身份证,包含省份、长度、出生年月日、校验位的检测、性别、年龄
- nRF5 SDK Bootloader and DFU moudles(1)
- 部署kubernetes-prometheus和用kubespray部署kubernetes后修改kubelet的
- MySQL_数据表命令
- linux-32bit-内存管理
- fastadmin model关联模型 关联查询问题
- 【Python】if __name__ == '__main__' 含义解析
- WijmoJS V2019.0 Update2发布:再度增强 React 和 Vue 框架的组件功能
- 理解twisted中的reactor和deferred(二)
- JavaScript-checkbox标签-隐藏、显示、全选、取消和反选等操作