序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象;序列化保存对象转态,不保存静态变量。

三种情况:

1. 将对象存储在硬盘上。

2. 将对象通过网络传输。

3. 通过RMI远程调用等方式传输对象的时候。

在这三种情况下,是需要进行序列化然后传输的。

1、其实序列化,它是完整的保存了某一状态下的对象信息,是一个整体,而不是零散的!我在一个IBM工程师的博客里面看到一个说法,我感觉对于我理解序列化很有帮助,他说序列化的过程,就是一个“freeze”的过程,它将一个对象freeze住,然后进行存储,等到再次需要的时候,再将这个对象de-freeze就可以立即使用。

2、而像int、long、boolean类型等,都是基本数据类型,数据库里面有与之对应的数据结构。从类声明来看,我们以为的没有进行序列化,其实是在声明的各个不同变量的时候,由具体的数据类型帮助我们实现了序列化操作。所以就算我们不实现serializable依旧可以正常操作。

这时候,就又有一个问题,既然实体类的变量都已经帮助我们实现了序列化,为什么我们仍然要显示的让类实现serializable接口呢?

首先,序列化的目的有两个,第一个是便于存储,第二个是便于传输。我们一般的实体类不需要程序员再次实现序列化的时候,请想两个问题:第一:存储媒体里面,是否是有其相对应的数据结构?第二:这个实体类,是否需要远程传输(或者两个不同系统甚至是分布式模块之间的调用)?

如果有注意观察的话,发现序列化操作用于存储时,一般是对于NoSql数据库,而在使用Nosql数据库进行存储时,用“freeze”这个说法来理解是再恰当不过了,请在NoSql数据库中,给我找出个varchar,int之类的数据结构出来? 如果没有,但我们又确实需要进行存储,那么,此时程序员再不将对象进行序列化,更待何时?

备注:如果有人打开过Serializable接口的源码,就会发现,这个接口其实是个空接口,那么这个序列化操作,到底是由谁去实现了呢?其实,看一下接口的注释说明就知道,当我们让实体类实现Serializable接口时,其实是在告诉JVM此类可被序列化,可被默认的序列化机制序列化。

然后,需要说明的是,当我们在实体类声明实现Serializable接口时,再次进行观察,会发现这些类是需要被远程调用的。也就是说需要或者可能需要被远程调用,这就是序列化便于传输的用途。

最新文章

  1. 给zabbix穿一件漂亮的衣服
  2. 使用CSS3 制作一个material-design 风格登录界面
  3. ref的用法
  4. gif显示
  5. ServletConfig对象详解
  6. VAssistX的VA Snippet Editor的类注释和函数注释
  7. struts标签,<s:textfield>嵌套<s:property>的问题
  8. UITableView全面解析,讲的好详细
  9. [swustoj 585] 倒金字塔
  10. Python全栈开发之 Mysql (一)
  11. zf-关于公司框架的时间字段的格式转换问题。。
  12. 如何利用express新建项目(上)
  13. Eclipse 那些小技巧(值得收藏)
  14. 开放接口/RESTful/Api服务的设计和安全方案详解
  15. word,excel,ppt在线预览功能
  16. selenium+Python(select定位)
  17. 使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化
  18. Kaggle:House Prices: Advanced Regression Techniques 数据预处理
  19. vector向量容器(常用的使用方法总结)
  20. python web中的并发请求

热门文章

  1. JS实现表单多文件上传样式美化支持选中文件后删除相关项
  2. MongoDB注册Windows服务启动
  3. Windows nginx php cgi-fcgi 配置 xdebug
  4. HTTP协议中的长连接、短连接、长轮询、短轮询
  5. cookie 知识点
  6. PHP安全相关的配置(2)
  7. grep和egrep正则表达式
  8. 【appium】根据accessibility_id定位元素
  9. OSI7层封包解包动态图-数据在网络中的传输过程.gif
  10. Extjs Column布局常见问题及解决方法