对象的序列化实现Serializable 接口和Externalizable接口
来源:互联网 发布:矩阵的合同矩阵怎么求 编辑:程序博客网 时间:2024/04/19 00:58
/**对象的序列化:**/import java.io.*;class Animal implements Serializable //实现Serializable 的接口{private String name;int age; Animal(String name,int age) { this.name = name;this.age = age; }public String toString() {return name+":"+age+""; }}class ObjectOutputStreamDemo{public static void sop(Object obj){System.out.println(obj);}public static void main(String[] agrs)throws Exception{ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c:\\anmial.txt")); //写对象的字节流oos.writeObject(new Animal("MM",13)); //写一个对象oos.close();ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c:\\anmial.txt"));Animal ami=(Animal)ois.readObject(); //读一个anmial的对象sop(ami.toString());ois.close();}}
注意的问题: 1. 在类中如果定义了static 变量的对象不能序列化,原因是它们在内存中的区域不一样,定义static 在共享数据区,一个在堆区2.在非静态的变量不想被序列化可以加transient关键字进行修饰即可
3.可以给自定义的类加上static final long serialVersionUID=任意数字的Long 即可,类的属性改变,照样能从硬盘中读出
该程序是模仿网上Tree的形式来写的,用到了注意事项的内容
import java.io.*;class Tree implements Serializable //该接口是个可把对象序列化 { static final long serialVersionUID = 43L; //固定的UID号,防止类的属性变化,UID号也跟着改变transient private int id; //该ID 数据不会写到硬盘中private Tree left;private Tree right;private int num;/****************************************************************** 产生多少个节点就产生多少个对象****************************************************************/public Tree(int num){if((--num)>=0){left = new Tree(num);//右孩子right = new Tree(num);}}public void printTree(int num){/*****************父节点的打印****************************/if(num==2){System.out.print("父节点");}for(int i=0;i<num;i++){System.out.print("*");}System.out.println("node"+num); /***************子节点的打印*******************************/ if((--num)>=0){System.out.print("左孩子节点");left.printTree(num);System.out.print("右孩子节点"); right.printTree(num);}}}class ObjectOutputStreamTree{public static void sop(Object obj){System.out.println(obj);}public static void main(String[] agrs)throws Exception{//writeObj();readObj();}public static void writeObj()throws IOException{ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("c:\\Tree.txt"));oos.writeObject(new Tree(2));oos.close();}public static void readObj()throws Exception{ObjectInputStream ois=new ObjectInputStream(new FileInputStream("c:\\Tree.txt"));Tree tr=(Tree)ois.readObject(); //返回一个对象 tr.printTree(2);ois.close();}}/**用Externalizable 的接口来Serailizable 的扩展除了能存对象信息还能存数组,字符串**/import java.io.*;class Tree implements Serializable //该接口是个可把对象序列化 { static final long serialVersionUID = 43L; //固定的UID号,防止类的属性变化,UID号也跟着改变transient private int id; //该ID 数据不会写到硬盘中private Tree left;private Tree right;private int num;/****************************************************************** 产生多少个节点就产生多少个对象****************************************************************/public Tree(int num){if((--num)>=0){left = new Tree(num);//右孩子right = new Tree(num);}}public void printTree(int num){/*****************父节点的打印****************************/if(num==2){System.out.print("父节点");}for(int i=0;i<num;i++){System.out.print("*");}System.out.println("node"+num); /***************子节点的打印*******************************/ if((--num)>=0){System.out.print("左孩子节点");left.printTree(num);System.out.print("右孩子节点");right.printTree(num);}}}class PointTree implements Externalizable {static final long serialVersionUID = 44L; public PointTree(){} //要构造一个空的无参构造函数(权限必须是public )private String ss="saw forest";Tree tr=new Tree(2); /** * 实现Externalizable 的接口必须要复写writeExternal () 和readExternal() 的方法 * *才能有资格调用writeObject() 和readObject() 的方法,调用这两个方法 * *其实就是调用的writeExternal() 和readExternal() * * *可以根据需要定义除了对象别的数据形式。从这里说明了它是Serailizable的扩展 * */public void writeExternal(ObjectOutput out)throws IOException{out.writeObject(tr); out.writeObject(ss);}public void readExternal(ObjectInput oin)throws IOException,ClassNotFoundException{Tree ss=(Tree)oin.readObject();ss.printTree(2);String st=(String)oin.readObject();System.out.println(st);}}class ObjectOutputStreamTree{public static void sop(Object obj){System.out.println(obj);}public static void main(String[] agrs)throws Exception{writeObj();readObj();}public static void writeObj()throws IOException{ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("c:\\Tree.txt"));PointTree pt=new PointTree();oos.writeObject(pt);oos.close();}public static void readObj()throws IOException,ClassNotFoundException{ObjectInputStream ois=new ObjectInputStream(new FileInputStream("c:\\Tree.txt"));PointTree tr=(PointTree)ois.readObject(); ois.close();}}
- 对象的序列化实现Serializable 接口和Externalizable接口
- 序列化--Serializable接口和Externalizable接口
- Java中实现序列化的两种方式 Serializable 接口和 Externalizable接口
- 序列化接口:Serializable/Externalizable
- IO流之对象序列化(Serializable接口和Externalizable接口)
- Java IO操作——对象序列化(Serializable接口、ObjectOutputStream、以及与Externalizable接口的用法和区别)
- 序列化的两种方法:Serializable 接口和 Externalizable接口
- 09_ObjectIO,transient关键字(透明的),Serializable序列化接口和 Externalizable
- 对象的序列化 Externalizable Serializable
- Serializable接口实现对象序列化
- 对象的序列化,需要实现Serializable 接口
- 自定义序列化实现Externalizable接口需要注意的问题
- 序列化:Serializable和Externalizable
- 序列化Serializable和Externalizable
- 对象的序列化与Serializable 接口
- Serializable对象序列化接口
- Android 实现序列化:Parcelable和Serializable接口的用法
- 实现serializable序列化接口
- 优米网王利芬:一个人能否成才取决于四点
- Android面试之---谈谈你对Android NDK的理解.
- 多重循环下的continue的使用
- exit()与_exit()的区别
- 常用Cmd命令
- 对象的序列化实现Serializable 接口和Externalizable接口
- oracle获取表的字段名称、字段类型、长度、注释、主键的sql语句
- 自动复制指定文件到指定目录中的NANT脚本
- 杭电 3791 搜索二叉树
- <connectionStrings>和<appSettings>这个的区别
- wince5.0 和wince6.0 出了2011 年全年包了,有人说wince6.0 2011 年全年包不行?
- Facebox——打造类似Facebook、人人网的提示框
- Android 属性系统设计分析
- Linux 下ACE的构建