Serializable接口

Posted mandylu2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Serializable接口相关的知识,希望对你有一定的参考价值。

>官方解释:

Serializable接口是启用其序列化功能的接口。实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化。
>通俗地说:
任何类型只要实现了Serializable接口,就可以被保存到文件中,或者作为数据流通过网络发送到别的地方。也可以用管道来传输到系统的其他程序中。
     
  Serializable本身并没有任何成员变量和函数,它的作用只相当于一个标记,实现了该接口的类,就是告诉Java这个类是可读写的,可以写入Byte流(序列化),也可以从Byte流读取(反序列化)。
 
  所以,需要用到Serializable的主要有两个地方:
  • 需要把对象保存到数据库或文件中
  • 需要把对象通过网络传输
>如何使用:
  通过ObjectOutputStream 的writeObject()方法把这个类的对象写到一个地方(文件),再通过ObjectInputStream 的readObject()方法把这个对象读出来。
 
>几点注意:
  1. serialVersionUID:一般为固定的1L,也可以随机生成一个不重复的long类型数。可以理解为该可序列化类的标识,如果序列化和反序列化时涉及的类相同,但serialVersionUID不同,会导致反序列化失败,在网络传输时尤其需要注意。无特殊需要时,可默认1L;随机long型数可用于限制某些用户访问。
  2. 静态成员变量:类中的静态成员变量并不会被序列化保存,反序列化时为初始默认值。
  3. transient关键字:某些变量不想被序列化,又不适合静态声明,则可以用transient关键字修饰,反序列化时同样为初始值。transient是瞬时的意思,所以适用于一些瞬时变化的不适合保存的变量。
  4. 继承:父类实现Serializable后,子类自动实现。如果父类未实现,则需要有默认的无参构造函数,供子类反序列化的时候调用。

感谢:本文要点收集整理来自http://blademastercoder.github.io/2015/01/29/java-Serializable.html

  
  

以上是关于Serializable接口的主要内容,如果未能解决你的问题,请参考以下文章

具有 json_serializable 的复杂模型 - List<objects> 未转换为地图

hibernate丢失更新

如何序列化 Windows.Media.Brush

Serializable接口

RandomAccess 接口,为啥没有方法?

Java实体对象为什么要实现Serializable接口?