序列化:将数据结构或对象转换成二进制串的过程。
反序列化:将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程。

Parcelable 与 Serializeable 的区别

Serializable Parcelable
通过IO对硬盘操作,速度较慢 直接在内存操作,效率高,性能好
大小不受限制 一般不能超过1M,修改内核也只能4M
大量使用反射,产生内存碎片

有关序列化的几个问题

  1. 什么是serialVersionUID?如果你不定义这个,会发生什么?

  2. 假如你有一个类,它序列化并存储在持久性中,然后修改了该类以添加新字段,如果对已序列化的对象进行反序列化,会发生什么情况?
    答:serialVersionUID是一个private static final long类型的ID,当它被印在对象上,它通常是对象的哈希码,你可以使用serialver这个JDK工具来查看序列化对象的serialVersionUID。serialVersionUID用于对于的版本控制,也可以在类文件种指定serialVersionUID。不指定serialVersionUID的后果是,当你添加或修改类中的任何字段时,则已序列化类将无法恢复,因为为新类和旧序列化对象生产的serialVersionUID将有所不同。Java序列化过程依赖于正确的序列化对象恢复状态的,并在序列化对象序列版本不匹配的情况下引发java.io.InvalidClassException无效类异常。

  3. 序列化时,你希望某些成员不要序列化?你如何实现它?
    答:有时候也会变着形式问,比如问什么是瞬态trasient变量,瞬态和静态变量会不会得到序列化等,所以,如果你不希望任何字段是对象的状态的一部分,然后声明它静态或瞬态根据你的需要,这样就不会是Java序列化过程中被包含在内

  4. 如果一个类中的一个成员为实现可序列化接口,会发生什么情况?
    答:如果尝试序列化实现可序列化的类的对象,但该对象包含对不可序列化类的引用,则在运行时将引发不可序列化异常NotSerializableException

  5. 如果类是可序列化的,但其超类不是,则反序列化后从超级类继承的实例变量的状态如何?
    答:Java序列化过程仅在对象层次都是可序列化结构中继续,即实现Java中可序列化接口,并且从超级类继承的实例变量的值将通过调用构造函数初始化,在反序列化过程中不可序列化的超级类

  6. 是否可以自定义序列化过程,或者是否可以覆盖Java中的默认序列化过程?

  7. 假设新类的超级类实现可序列化接口,如何避免新类被序列化?
    答:对于序列化一个对象需调用ObjectOutputStream.writeObject(saveThisObject),并用ObjectInputStream.readObject()读取对象,但Java虚拟机为你提供的还有一件事,是定义这个两个方法。如果在类中定义这两个方法,则JVM将调用这两个方法,而不是应用默认序列化机制。你可以在此处通过执行任何类型的预处理或后处理任何来自定义对象序列化和反序列化的行为。

  8. 在Java中的序列化和反序列化过程中使用哪些方法?
    答:考察你是否熟悉readObject()的用法、writeObject()、readExternal()和writeExternal()。Java序列化由java.io.ObjectOutputStream类完成。该类是一个筛选器流,它封装在较低级别的字节流中,以处理序列化机制。要通过序列化机制存储任何对象,我们调用ObjectOutputStream.writeObject(savethisobject),并反序列化该对象,我们称之为ObjectInputStream.readObject()方法。调用以writeObject()方法在java中触发序列化过程。关于readObject()方法,需要注意的一点很重要一点是,它用于从持久性读取字节,并从这些字节创建对象,并返回一个对象,该对象需要类型强制转换为正确的类型。

序列化--Serial相关推荐

  1. MFC序列化(serial)简单例子

    我们保存一些文本内容可以很简单的保存成一个文件就行了.但如果要把一些类对象信息保存起来,然后读取时用那些信息初始化一个类对象就比较复杂了.MFC提供了一个叫序列化的功能.可以把一个对象信息转化成二进制 ...

  2. ObjectOutputStream and ObjectInputStream 序列化 transient

    对象 内存------>硬盘文件中(序列化) ObjectOutputStream 序列化java对象  Serial 硬盘文件----->内存(反序列化)将硬盘中的数据"反序列 ...

  3. android开发高手课百度云盘,Android开发高手课NOTE

    内存优化 卡顿的原因 频繁 GC 造成卡顿.物理内存不足时系统会触发 low memory killer 机制,系统负载过高是造成卡顿的俩个原因. 除了频繁 GC 造成卡顿之外,物理内存不足时系统会触 ...

  4. 利用.NET的XML序列化解决系统配置问题

    作者:未知  请作者速与本人联系  出自: http://blog.csdn.net/ycl111/ 在Web系统开发中,我们经常需要读取和设置一些系统配置项,常见的例如数据库连接字符串.上传路径等等 ...

  5. Java中的对象序列化操作

    文章目录 1 Java中的对象序列化操作 1 Java中的对象序列化操作 首先看一下对象序列化的操作步骤: 创建一个类,继承Serializable接口 创建对象 将对象写入文件 从文件读取对象信息 ...

  6. 二叉树的序列化和反序列化

    二叉树记录成文件的过程叫做二叉树的序列化.通过文件重构原来二叉树的过程称为反序列化. class Tree:def __init__(self,value):self.value = valuesel ...

  7. 序列化的 serialVersionUID 到底有什么用?

    作者:学无止境 来源:www.cnblogs.com/duanxz/p/3511695.html 实现Serializable接口的目的是为类可持久化,比如在网络传输或本地存储,为系统的分布和异构部署 ...

  8. 利用序列化进行文件读写

    文章标题:利用序列化进行文件读写 原 作 者:vchelp 原 出 处:vchelp 发 布 者:loose_went 发布类型:转载 发布日期:2006-09-05 今日/总浏览:1/4935 在很 ...

  9. Java 序列化之 Externalizable

    相关文章: Java 序列化 之 Serializable JDK中除了提供 Serializable 序列化接口外,还提供了另一个序列化接口Externalizable,使用该接口之后,之前基于Se ...

最新文章

  1. 【烦人的问题】有一天发现VSCode中自己的鼠标选择老是跨行选择多段代码,怎么都改不回来,而且用alt+shift+鼠标都无法切换,肿么办?
  2. Windows Store App JavaScript 开发:获取文件和文件夹列表
  3. boost::hana::replace_if用法的测试程序
  4. 拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析
  5. f12 卡 谷歌浏览器_抢券第二课:利用浏览器F12获取优惠券请求链接
  6. zookeeper 可视化_大厂,常用,四款,大屏可视化工具
  7. MySQL子查询原理分析
  8. 【动态规划】路径dp:蓝桥2020: 数字三角形
  9. 计算机软件怎么共享使用,局域网共享软件,详细教您局域网共享软件如何使用...
  10. java面试之反射机制
  11. 2020年下半年系统集成项目管理工程师上午试题解析(三)
  12. c语言程序 实现简单计算器功能,C语言实现简单计算器功能(1)
  13. 双极结型三极管的结构、特性曲线、参数、lceda仿真
  14. 【放马过来---谈禅修打坐】
  15. uniapp开发微信小程序,主包(分包超过限制)
  16. 关于调ads1115时差分数据错误的时序分析,以及ads1115的计算公式
  17. 转载 编程新手入门
  18. RGB颜色透明度转换
  19. 数据库系统原理学习(三)--PG数据定义与操作
  20. ThinkPhp5.0.24 JWT报错 ‘“kid“ empty, unable to lookup correct key‘解决办法

热门文章

  1. 【工作需要】CAD+VBA 实现图块的旋转平移缩放和拼接
  2. CAD二次开发 对象
  3. 125家单位联合完成微生物组实验手册(Microbiome Protocol eBook)第1版
  4. 集线器、交换机、路由器之间的关系(清晰明了)
  5. 区块链学习笔记一 BTC密码学原理
  6. 雨阳打字通 v1.8 发布
  7. HACKTHEBOX——Help
  8. poj1985和poj1849(树的直径)
  9. PHP——四舍五入取整、向上取整、向下取整、小数截取
  10. 多边形颜色填充-X扫描线算法