qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

JAVA笔记——序列化

  所谓的对象序列化(在很多地方也被成为串行化),是指将对象转换成二进制数据流的一种实现手段。通过将对象序列化,可以方便地实现对象的传输及保存。

  在Java中提供有ObjectInputStream与ObjectOutputStream这两个类用于序列化对象的操作。这两个类是用于存储和独缺对象的输入输出流类,只要把对象中的所有成员变量都存储起来,就等于保存了这个对象,之后从保存的对象之中再将对象读取进来就可以继续使用此对象。ObjectInputStream类与ObjectOutputStream类,用于帮助开发者完成保存和读取对象成员变量取值的过程,但要求读写或存储的对象必须实现了Serializable接口,但Serializable接口中没有定义任何方法,仅仅被用作一种标志,已被编译器作特殊处理。

  下面是对象的序列化范例:

 import java.io.* ;
 public class Person implements Serializable
 {
  private String name ;
  private int age ;
  public Person(String name,int age)
  {
   this.name = name ;
   this.age = age ;
  }
  public String toString()
  {
   return " 姓名:"+this.name+",年龄:"+this.age ;
  }
 };

  这个类实现了Serializable接口,所以此类的对象可序列化。下面的范例使用ObjectOutputStream与ObjectInputStream将Person类的对象保存在文件之中:

 import java.io.*;
 public class SerializableDemo
 {
  public static void main( String args[] ) throws Exception
  {
   File f = new File("SerializedPerson") ;
   serialize(f);
   deserialize(f);
  }
 
  // 以下方法为序列化对象方法
  public static void serialize(File f) throws Exception
  {
   OutputStream outputFile = new FileOutputStream(f);
   ObjectOutputStream cout = new ObjectOutputStream(outputFile);
   cout.writeObject(new Person("张三",25));
   cout.close();
  }
  // 以下方法为反序列化对象方法
  public static void deserialize(File f) throws Exception
  {
   InputStream inputFile = new FileInputStream(f);
   ObjectInputStream cin = new ObjectInputStream(inputFile);
   Person p = (Person) cin.readObject();
   System.out.println(p);
  }
 }

  在程序中声明了一个deserialize()方法,此方法用于从文件中读取已经保存的对象。

  另外,如果不希望类中的某个属性被序列化,可以在声明属性之前加上transient关键字。用这个关键字修饰的属性没有被保存下来,输出时,将输出默认值。

posted on 2013-09-03 10:46 顺其自然EVO 阅读(260) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年9月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜