对象序列化体系概述

  • 通过使用ObjectInputStream和ObjectOutputStream类保存和读取对象的机制叫做序列化机制
  • 序列化与反序列化
    • 对象序列化是指将对象转换为字节序列的过程
    • 对象反序列化则是根据字节序列恢复对象的过程
  • 序列化一般用于以下场景:
    • 永久性保存对象,保存对象的字节序列到本地文件中
    • 通过序列化对象在网络中传递对象
    • 通过序列化在进程间传递对象

支持序列化的接口和类

  • 序列化的过程,是将任何实现了Serializable接口或Externalizable接口的对象通过ObjectOutputStream类提供的相应方法转换为连续的字节数据,这些数据以后仍可通过ObjectInputStream类提供的相应方法被还原为原来的对象状态,这样就可以将对象完成的保存在本地文件中,或在网络间、进程间传递
  • 支持序列化的接口和类
    • Serializable接口
    • Externalizable接口
    • ObjectInputStream类
    • ObjectOutputStream类

Serializable接口

只有一个实现Serializable接口的对象可以被序列化工具存储和恢复。

Serializable接口没有定义任何属性或方法。它只用来表示一个类可以被序列化。

如果一个类可以序列化,它的所有子类都可以序列化。

Externalizable接口

可以让需要序列化的类实现Serializable接口的子接口Externalizable。

Externalizable接口表示实现该接口的类在序列化中由该类本身来控制信息的写出和读入。

ObjectOutputStream类

ObjectOutputStream类继承OutputStream类,并实现了ObjectOutput接口,它负责向流写入对象。

构造方法

ObjectOutputStream(OutputStream out)

主要方法

writeObject(Object obj) // 向指定的OutputStream中写入对象obj

ObjectInputStream类

ObjectInputStream类继承InputStream类,并实现了ObjectInput接口,它负责从流中读取对象 。

构造方法

ObjectInputStream(InputStream in)

主要方法

readObject(Object obj) // 从指定的InputStream中读取对象

对象序列化的条件

  • 该对象类必须实现Serializable接口
  • 如果该类有直接或者间接的不可序列化的基类,那么该基类必须 有一个默认的构造器。该派生类需要负责将其基类中的数据写入 流中
  • 建议所有可序列化类都显式声明serialVersionUID值

序列化与serialVersionUID

这个属性,在IDEA里是不主动提示的,但Eclipse中会提示的,并建议开发者自己指定或者使用默认值。

默认值是这么写的:

private static long serialVersionUID = 1L;

serialVersionUID在反序列化过程中用于验证序列化对象的发送者和接收者是否为该对象加载了与序列化兼容的类。

如果接收者加载的该对象的类的serialVersionUID与对应的发送者的类的版本号不同,则反序列化将会抛出InvalidClassException。

序列化与transient关键词

《举例浅谈Java关键词transient的使用》

封装序列化文件操作工具

《Java封装序列化文件工具类》

【Java】Java对象序列化I/O体系总结相关推荐

  1. 【六祎 - Java】对象序列化

    目标:对象序列化技术.对象序列化:就是把Java对象数据直接存储到文件中去. 对象 => 文件中对象反序列化:就是把Java对象的文件数据恢复到Java对象中. 文件中 => 对象字节流 ...

  2. java中系统撤销对象顺序实例,撤消/重做功能Java的对象序列化

    游戏编程与"企业应用程序"编程和"webapp编程"没有多大关系. 所以这取决于你正在做什么样的游戏,但你的方法和gaven所以这些票价与游戏状态在" ...

  3. java 嵌套对象序列化_在javascript中将复杂的,嵌套的,用户定义的对象序列化为字符串...

    是的,所以's kind of like you'重新序列化对象数据,而不是类数据 . 变量仍然存在,但关于类的元数据(即方法)没有被保留 . 一个解决方案可能是serialijse . serial ...

  4. java 对象怎么序列化,java对象序列化总结

    java对象序列化小结 百度百科上介绍序列化是这样的: 序列化 (Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储 ...

  5. java对象序列化作用_Java学习之——理解对象序列化

    Java的对象序列化就是把对象写入到输出流中,用来存储或传输:反序列化就是从输入流中读取对象.简单的来说是指将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列 ...

  6. java byte序列化,java对象序列化byte[] and byte[]反序列化对象--转

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  7. Java 之 Serializable 序列化和反序列化的概念,作用的通俗易懂的解释

    遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化 b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,se ...

  8. Java 之 Serializable 序列化和反序列化的概念,作用的通俗的解释

    1.序列化和反序列化的疑问 遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化 b,作用.为啥要实现这个 Serializable 接口, ...

  9. java 序列化理解_对Java Serializable(序列化)的理解和总结(二)

    遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题 a,什么叫序列化和反序列化 b,作用.为啥要实现这个 Serializable 接口,也就是为啥要序列化 c,se ...

最新文章

  1. thinkphp5+远程代码执行_ThinkPHP5 5.0.23 远程代码执行漏洞
  2. python怎么输出浮点数_python 零基础入门教程第 2 章:基本数据类型 (一)
  3. poj 1006 java_POJ 1006 Biorhythms 数论-(孙子定理)
  4. Lucene索引库的维护功能实现
  5. jboss eap_HawtIO在JBoss EAP上(第二部分)
  6. CentOS6.4 Install FTP
  7. select、poll、epoll使用小结
  8. javawed商店商品结算_微信小商店搭建
  9. 我的世界java 内存_我的世界如何分配内存
  10. 管理端口_内网渗透 | 红蓝对抗:Windows利用WinRM实现端口复用打造隐蔽后门
  11. 关于最新上映电影的评论
  12. IDEA插件系列(45):UUID Generator插件——UUID生成器
  13. QPushButton设置背景图片变换(素材四连图)
  14. VMWARE 之 分布式网络交换机
  15. 如何满足python安装需求升级win7到SP1版本
  16. word设置表格文字紧贴下框线
  17. js停止setInterval
  18. python输入某年某月某日歌词_python求输入某年某月某日,判断这一天是这一年的第几天...
  19. HaaS Lab 快速体验
  20. graphs菜单_Graphs Made Easy-统计图绘制软件下载 v4.1.0.0 官方版 - 安下载

热门文章

  1. java听课笔记(六)
  2. (转)unity web 缓存解决方案
  3. Ubuntu 12.10连接米2
  4. 贪婪算法在求解最小生成树中的应用(JAVA)--Prim算法
  5. PXF webapp is inaccessible but tomcat is up
  6. oracle 布尔转换java布尔_java 布尔值一种赋值方法
  7. 微信php翻译和天气预报整合,微信公众平台天气预报功能开发
  8. python字典程序题_急!一道关于python字典的编程题!求思路!
  9. java第二章_JAVA第二章知识点
  10. 山东外贸职业学院王彩霞老师网上考试系统及c语言考试题库》,2015年山东外贸职业学院单招考试内容...