序列化过程中,其对象想要被序列化,那么它的类就要实现 此接口,这个对象的所有属性(包括private属性、包括其引用的对象)都可以被序列化和反序列化来保存、传递。
比如:在本实例中,DivSort必须实现Serializable接口,不实现的话,会在序列化过程中报错,一般会在o.writeObject(obj)的这一步骤报错。
import java.io.Serializable;publicclassDivSortimplementsSerializable{publicint age;public String name;publicint score;publicDivSort(int age, String name,int score){super();this.age= age;this.name= name;this.score= score;}publicintgetAge(){return age;}publicvoidsetAge(int age){this.age= age;}public StringgetName(){return name;}publicvoidsetName(String name){this.name= name;}publicintgetScore(){return score;}publicvoidsetScore(int score){this.score= score;}}
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;import java.util.ArrayList;publicclassArrayToByte{/**
*
*/privatestaticfinallong serialVersionUID=1L;publicstaticvoidmain(String[] args)throws IOException, ClassNotFoundException{// TODO Auto-generated method stub
ArrayList<DivSort> list1=newArrayList<DivSort>();byte[] b=null;
list1.add(newDivSort(12,"zhansan",234));
list1.add(newDivSort(13,"zhansan",234));
list1.add(newDivSort(14,"zhansan",234));for(DivSort l:list1){
System.out.println(l.age);}
System.out.println("start");
b=ArrayToByte.serialize(list1);
System.out.println(b);
System.out.println(ArrayToByte.deserialize(b));
list1=(ArrayList<DivSort>) ArrayToByte.deserialize(b);for(DivSort d:list1){
System.out.println(d.getAge());}}publicstaticbyte[]serialize(Object obj)throws IOException{try(ByteArrayOutputStream b=newByteArrayOutputStream()){try(ObjectOutputStream o=newObjectOutputStream(b)){
o.writeObject(obj);}return b.toByteArray();}}publicstatic Objectdeserialize(byte[] bytes)throws IOException, ClassNotFoundException{try(ByteArrayInputStream b=newByteArrayInputStream(bytes)){try(ObjectInputStream o=newObjectInputStream(b)){return o.readObject();}}}}