Java对象的序列化


1.什么是Java序列化

Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,就可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。

使用Java对象序列化,在保存对象时,会把其状态保存为一组字节,在未来,再将这些字节组装成对象。必须注意地是,对象序列化保存的是对象的"状态",即它的成员变量。由此可知,对象序列化不会关注类中的静态变量。

除了在持久化对象时会用到对象序列化之外,当使用RMI(远程方法调用),或在网络中传递对象时,都会用到对象序列化。Java序列化API为处理对象序列化提供了一个标准机制,该API简单易用。

Java中介者设计模式

Java 设计模式之模板方法开发中应用

设计模式之 Java 中的单例模式(Singleton)

Java对象序列化

2.如何序列化一个对象

一个对象能够序列化的前提是实现Serializable接口,Serializable接口没有方法,更像是个标记。有了这个标记的Class就能被序列化机制处理。

import java.io.Serializable; 
 
class TestSerial implements Serializable { 
 
      public byte version = 100; 
 
      public byte count = 0; 
 
}

然后我们写个程序将对象序列化并输出。ObjectOutputStream能把Object输出成Byte流。我们将Byte流暂时存储到temp.out文件里。

public static void main(String args[]) throws IOException { 
 
      FileOutputStream fos = new FileOutputStream("temp.out"); 
 
      ObjectOutputStream oos = new ObjectOutputStream(fos); 
 
      TestSerial ts = new TestSerial(); 
 
      oos.writeObject(ts); 
 
      oos.flush(); 
 
      oos.close(); 

如果要从持久的文件中读取Bytes重建对象,我们可以使用ObjectInputStream。

public static void main(String args[]) throws IOException { 
 
      FileInputStream fis = new FileInputStream("temp.out"); 
 
      ObjectInputStream oin = new ObjectInputStream(fis); 
 
      TestSerial ts = (TestSerial) oin.readObject(); 
 
      System.out.println("version="+ts.version); 
 
}

更多详情见请继续阅读下一页的精彩内容:

  • 1
  • 2
  • 3
  • 下一页

相关内容