`

java 类的序列化

阅读更多
序列化:
可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将文件的内容读取,转化为一个对象。

处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

import java.io.*;

public class SerializationDemo{
public static void main(String args[]){

   //Object serialization
   try{
    MyClass object1=new MyClass("Hello",-7,2.7e10);
    System.out.println("object1:"+object1);
    FileOutputStream fos=new FileOutputStream("serial.txt");
    ObjectOutputStream oos=new ObjectOutputStream(fos);
    oos.writeObject(object1);
    oos.flush();
    oos.close();
    }
   catch(Exception e){
    System.out.println("Exception during serialization:"+e);
    System.exit(0);
    }

   //Object deserialization
   try{
    MyClass object2;
    FileInputStream fis=new FileInputStream("serial.txt");
    ObjectInputStream ois=new ObjectInputStream(fis);
    object2=(MyClass)ois.readObject();
    ois.close();
    System.out.println("object2:"+object2);
    }
   catch(Exception e){
    System.out.println("Exception during deserialization:"+e);
    System.exit(0);
    }
   }
}


@SuppressWarnings("serial")
class MyClass implements Serializable{

//private static final long serialVersionUID = 7279921812756335413L;

//private static final long serialVersionUID = 1L;
String s;
int i;
double d;
public MyClass(String s,int i,double d){
this.s=s;
this.i=i;
this.d=d;
}
public String toString(){
return "s="+s+";i="+i+";d="+d;
}
}


输出:
object1:s=Hello;i=-7;d=2.7E10
object2:s=Hello;i=-7;d=2.7E10
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics