`

Java对象序列化

阅读更多
最近给xxx写一个项目时,在项目中用到一些需要加载数据库本体库并经过计算得到的变量,因为要通过swing对变量做可视化展示,所以在重绘时只需要读取序列化之后的变量即可:但要注意以下几点
1、基本类型的数据可以直接序列化;一些容器类的对象已经要序列化;例如Vector<T>,若T不       是基本类型需要实现Serializable接口;
2、static和transient类型的成员数据不能被串行化。因为static代表类的状态, transient代表对象的临时数据;
3、相关的类和接口:在java.io包中提供的涉及对象的串行化的类与接口有ObjectOutputStream类、ObjectInputStream类。
4、串行化中的继承:如果父类实现了序列化,子类也可以序列化;在子类继承父类时如果父类没有实现串行化接口,那么其必须有默认的构造函数(即没有参数的构造函数)。否则编译的时候就会报错。在反串行化的时候,默认构造函数会被调用。但是若把父类标记为可以串行化,则在反串行化的时候,其默认构造函数不会被调用。
5、在通过对象流写入文件时一定要注意,将对象流中的对象flush出来,否则在反序列化时会有发现某些对象没有从对象流中读出。

//TreeNode是实现序列化接口的类;TreeView.getFourthPeriodNodes()是静态的不能
//序列化所以重新定义局部变量进行序列化
Vector <TreeNode> v4 = new Vector<TreeNode>(TreeView.getFourthPeriodNodes());
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ObjectOutputStream objectOut = new ObjectOutputStream(bos);
objectOut.writeObject(v1);
objectOut.flush();//这里之前忘了写,在读取时就读不出来
objectOut.close();
//读取对象流
FileInputStream fis = new FileInputStream(file);
ObjectInputStream objectIn = new ObjectInputStream(fis);
TreeView.setFirstPeriodNodes((Vector<TreeNode>)objectIn.readObject());
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics