Java 中的Object串行化(Serializable)

Java对象串行化详解
本文介绍了Java中对象串行化的实现方式,包括如何通过实现Serializable接口来支持对象的保存和读取。讨论了串行化过程中对对象引用的处理,并展示了具体的代码示例。还解释了超类实现Serializable接口的影响及串行化过程中的注意事项。

假如你想保存一个对象(object),则这个对象所属类必须实现Serializable接口。

当串行化一个对象时,Java会保存对象的完整的“对象图”,即对该对象引用的其他对象,也进行串行化。当然,那些“其他对象”也要实现Serializable接口,否者抛NotSerializableException异常。

java 代码
  1. import java.io.*;   
  2.   
  3. public class A{   
  4.  public static void main(String [] args){   
  5.     Dog d = new Dog();   
  6.     Dog d2 = new Dog();   
  7.      try{   
  8.          FileOutputStream fos = new FileOutputStream("E:\\doc\\dogs.dat");   
  9.          ObjectOutputStream oos =new ObjectOutputStream(fos);   
  10.          oos.writeObject(d) ;   
  11.          oos.close();   
  12.      }catch(Exception e){   
  13.          e.printStackTrace();   
  14.      }   
  15.         
  16.      try{   
  17.          FileInputStream fis =new FileInputStream("E:\\doc\\dogs.dat");   
  18.          ObjectInputStream ois = new ObjectInputStream(fis);   
  19.          d2 = (Dog)ois.readObject();   
  20.          ois.close();   
  21.      }catch(Exception e){   
  22.          e.printStackTrace();   
  23.      }   
  24.         
  25.      System.out.println("name:"+d2.name+" age:"+d2.age+" shout:"+d2.shout());   
  26.         
  27.  }   
  28. }   
  29.   
  30. class Dog extends Animal implements Serializable{   
  31.  String name ="Peter";   
  32.  int age = 5;   
  33.  String  shout(){   
  34.     return  "Ho~Ho~";   
  35.  }   
  36.   
  37. }   
  38. //Animal必须是实现Serializable   
  39. class Animal implements Serializable{   
  40.  String name = "Unknown";
  41.  Animal(){
  42.    System.out.println("Animal构造函数运行");
  43.   }  
  44. }  

实现了Serialiable接口的超类,在串行化时不会运行构造函数。没有实现了Serialiable接口的超类,否则会运行其构造函数。(每当实例化一个子类对象时,父类的构造函数将先于子类的构造函数被调用。)

添加标识transient 的变量 将不会被串行化,当该变量所属对象被反串行化时,该变量变为其数据类型的默认值。(String默认值为null,int为0.)

串行化不适合静态变量,它只针对实例对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值