java对象的序列化和反序列化

引言:

  序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其带你过去的状态写入到临时或持储存区,反序列化就是重新创建对象的过程,此对象来自于临时或持久储存区。

序列化的作用:

  就好比如存储数据到数据库,将一些数据持久化到数据库中,而有时候需要将对象持久化,虽然说将对象状态持久化的方式有很多,但是java给我们提供了一种很便捷的方式,那就是序列化,序列化可以实现对象到文件之间的直接转换,实现细节对我们隐藏。

  具体的三种用途:

将对象的状态信息持久化保存到硬盘上

将对象信息在网络上传输

深度克隆(就是序列化后再反序列化)

方式一:实现Serializable接口,通过序列化流

  实现Serializable接口,通过ObjectOutputStream和ObjectInputStream将对象序列化和反序列化。


方式二:实现Externalizable接口,重写writeExternal和readExternal方法

  Externalizable接口继承了Serializable接口,替我们封装了两个方法,一个用于序列化,一个用于反序列化。这种方式是将属性序列化,注意这种方式transient修饰词将失去作用,也就是说被transient修饰的属性,只要你在writeExternal方法中序列化了该属性,照样也会得到序列化。


总结:

  注意以下三点:

Serializable接口是标记接口,是个空接口,用于标识该类可以被序列化。

transient是属性修饰符,被其修饰的属性将不会被序列化,但是使用方式二的话,明确写明该属性序列化同样可以得到序列化。

serialVersionUID属性是类的序列化标识ID,若序列化的对象和反序列化的对象其serialVersionUID属性不一样则会报错。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 对象序列化的目标: 将对的字节序列对象永久的保存到磁盘中。 允许在网络上直接传输对象,传输对象的字节序列。 对象序...
    年少懵懂丶流年梦阅读 4,866评论 0 3
  • JAVA序列化机制的深入研究 对象序列化的最主要的用处就是在传递,和保存对象(object)的时候,保证对象的完整...
    时待吾阅读 13,753评论 0 24
  • “最好的教材就是源码注释,然后是大牛的总结。” 从今天开始写博客,目的很明确,梳理零碎的java知识,总结并记录下...
    蜗牛在北京阅读 4,371评论 1 1
  • 从前天开始,我突然想着是否有个在手机上写东西的app.不需要太大,只是把自己的想法,记录下来。我喜欢写一些东西,有...
    Miss凉风阅读 4,948评论 0 0
  • e9c27517a4d5阅读 1,279评论 0 0

友情链接更多精彩内容