Java中序列化

来源:互联网 发布:小学生编程软件下载 编辑:程序博客网 时间:2024/04/28 11:22

定义一个可序列化类:

/*当改变此类的结构时,那么序列化文件中存储的对象就不能使用,原因序列化的UID已经发生改变。我们可以设置类的UID,防止对成员修改导致崩溃。注意:1、序列化是采用一个serialVersionUID来关联类2、序列号在反序列化中验证对象的发送者和接受者是否对应。如果不对应,导致InvalidClassException3、可序列化类通过声明serialVersionUID字段(必须是static、final、long类型字段)显示声明自己的serialVersionUID4、如果未显示声明,则序列化运行时,系统基于该类的成员进行计算该类的serialVersionUID,因此建议显示声明,并且为private5、不能序列化静态成员,只能序列化堆内存中的成员。若果要对不是静态成员序列化,可加transient*/import java.io.*;class Person implements Serializable{private static final long serialVersionUID = 42L;String name;int age;Person(String name,int age){this.name = name;this.age = age;}public String toString(){return this.name + " ..." + this.age;}}


2、测试例类

/*ObjectOutputStream:将Java的基本对象数据类型写入OutputStream,*/import java.io.*;import java.lang.Exception;class  ObjectDemo{public static void main(String[] args)throws Exception{//writeObj();//出现 某个要序列化的对象不能实现java.io.NotSerializableException异常。查阅api,得知要实现Serializable接口//该接口没有方法,称为标记接口。readObj();}public static void readObj()throws Exception{ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));//对应接收Person p = (Person)ois.readObject();System.out.println(p);ois.close();}//将对象写入到文件中,保存起来public static void writeObj() throws IOException{ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("obj.txt"));oos.writeObject(new Person("lisi",39));oos.close();}}



0 0
原创粉丝点击