Java 序列化

原创 Laughing  2017-11-07 00:58  阅读 52 次 评论 0 条

Java对象序列化的前提条件是对象实现Serializable或者Externalizable接口。

定义可序列化对象

  1. package fkjavajy.ch11.action.Entity;  
  2.   
  3. import java.io.Externalizable;  
  4. import java.io.IOException;  
  5. import java.io.ObjectInputStream;  
  6. import java.io.ObjectOutputStream;  
  7. import java.io.Serializable;  
  8.   
  9. public class Person implements Serializable {  
  10.     private String name;  
  11.     private transient int age;  
  12.     public Person(String name,int age){  
  13.         this.name=name;  
  14.         this.age=age;  
  15.     }  
  16.     public String name() {  
  17.         return name;  
  18.     }  
  19.     private void writeObject(ObjectOutputStream out) throws IOException{  
  20.         out.writeObject(new StringBuffer(name).reverse());  
  21.         out.writeInt(age);  
  22.     }  
  23.       
  24.     private void readObject(ObjectInputStream in)throws IOException, ClassNotFoundException{  
  25.         this.name = ((StringBuffer)in.readObject()).reverse().toString();  
  26.         this.age = in.readInt();  
  27.     }  
  28. }  

输出对象

  1. package fkjavajy.ch11.action;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileOutputStream;  
  5. import java.io.ObjectInputStream;  
  6. import java.io.ObjectOutputStream;  
  7.   
  8. import fkjavajy.ch11.action.Entity.Person;  
  9.   
  10. public class ch15_5_8_1 {  
  11.   
  12.     public static void main(String[] args) {  
  13.         // TODO 自动生成的方法存根  
  14.         try {  
  15.             ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("object.txt"));  
  16.             Person person = new Person("孙悟空"500);  
  17.             objectOutputStream.writeObject(person);  
  18.         } catch (Exception e) {  
  19.             // TODO: handle exception  
  20.         }  
  21.         try {  
  22.             ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("object.txt"));  
  23.             Person p = (Person)objectInputStream.readObject();  
  24.             System.out.println(p.name());  
  25.         } catch (Exception e) {  
  26.             // TODO: handle exception  
  27.         }  
  28.     }  
  29.   
  30. }  

通过transient设置不序列化的字段

如下代码,我们通过transient修饰age变量,那么age变量将不会被序列化

  1. package fkjavajy.ch11.action.Entity;  
  2.   
  3. import java.io.Externalizable;  
  4. import java.io.Serializable;  
  5.   
  6. public class Person implements Serializable {  
  7.     private String name;  
  8.     private transient int age;  
  9.     public Person(String name,int age){  
  10.         this.name=name;  
  11.         this.age=age;  
  12.     }  
  13.     public String name() {  
  14.         return name;  
  15.     }  
  16. }  

自定义序列化

我们继续改写Person.java代码,修改如下

  1. package fkjavajy.ch11.action.Entity;  
  2.   
  3. import java.io.Externalizable;  
  4. import java.io.IOException;  
  5. import java.io.ObjectInputStream;  
  6. import java.io.ObjectOutputStream;  
  7. import java.io.Serializable;  
  8.   
  9. public class Person implements Serializable {  
  10.     private String name;  
  11.     private transient int age;  
  12.     public Person(String name,int age){  
  13.         this.name=name;  
  14.         this.age=age;  
  15.     }  
  16.     public String name() {  
  17.         return name;  
  18.     }  
  19.     private void writeObject(ObjectOutputStream out) throws IOException{  
  20.         out.writeObject(new StringBuffer(name).reverse());  
  21.         out.writeInt(age);  
  22.     }  
  23.       
  24.     private void readObject(ObjectInputStream in)throws IOException, ClassNotFoundException{  
  25.         this.name = ((StringBuffer)in.readObject()).reverse().toString();  
  26.         this.age = in.readInt();  
  27.     }  
  28. }  
本文地址:https://www.lisen.me/java-serialization.html
版权声明:本文为原创文章,版权归 木子网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情