计算机系统应用教程网站

网站首页 > 技术文章 正文

Java:transient与序列化 java中的序列化

btikc 2024-10-01 08:15:21 技术文章 14 ℃ 0 评论

序列化

Java的serialization提供一种持久化对象实例的机制。当进行远程通信时,无论何种类型的数据,都会以二进制序列的形式在网络上传送。序列化是一种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或保存到文件、数据库等,并在需要时把该流读取出来重新构造成一个相同的对象。

Java中如何实现序列化

  1. 要实现序列化的类必须实现 java.lang.Serializable接口;
  2. 使用一个输出流,比如:FileOutputStream,构造一个ObjectOutputStream对象;
  3. 使用对象的writeObject方法将obj对象写出(即保存其状态),恢复时可以使用对应的输入流

transient

当序列化持久一个对象时,可能并不需要序列化持久所有的属性,对于这种情况,可以通过在属性前加上关键字transient来实现。

序列化的特点

  1. 如果一个类能被序列化,那么它的子类也能够被序列化;
  2. 由于static代表类的成员,transient代表对象的临时数据。被声明为这两种类型的数据成员不能够被序列化;
  3. 子类实现了java.lang.Serializable接口,父类没有,父类中的属性不能被序列化,但子类中的属性可以被序列化。

举例

class SuperClass{
      public String name;
}
class Sub extends SuperClass implements Serializable {
      private float radius;
      transient int color;
      public static String type = "type";
}

在序列化一个Sub类的对象sub到文件时,只有radius属性能被保存到文件中。

可以通过序列化与反序列化来破坏设计模式中的单例模式(只能被实例化一个对象的类)。前提是单例类实现java.lang.Serializable 接口。序列化对象保存到文件,然后反序列化文件生成一个对象,堆中出现了两个类的实例对象,虽然对象的各类型属性的值一样,但id不一样。从而破坏了单例模式

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表