Java序列化几点注意事项
来源:互联网 发布:关闭端口占用 编辑:程序博客网 时间:2024/06/08 09:32
序列化保存的是对象的状态,而静态变量是类的状态。
2、对象要被序列化,它的类必须要实现Serializable接口;如果一个类中有引用类型的实例变量,这个引用类型也要实现Serializable接口。
3、可以用这个代码:ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("seria"));
但是不能用这个代码:ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("seria",true));
4、如果对象的引用类型没有实现序列化,但是还是想将这个对象序列化,那么可以将对象中用到的那个引用类型对象设置为transient类型。
(如果A包含了对B的引用,那么在序列化A的时候也会将B一并地序列化;如果此时A可以序列化,B无法序列化,那么在序列化A的时候就会发生异常,这时就需要将对B的引用设为transient,该关键字表示变量不会被序列化。)
5、如果用transient修饰引用类型对象,则这个引用类型的对象不会保存,那么如果希望保存下来又如何实现呢?
用这两段儿代码:
private transient Book book;//用transient关键字声明book
- //这个方法会在序列化的过程中被调用
- private void writeObject(ObjectOutputStream out){
- try {
- out.defaultWriteObject(); //这个方法会把这当前中非静态变量和非transient变量写到流中
- //在这里我们就把name写到了流中。
- //因为我们要保存Book的状态,所以我们还要想办法把其状态写入流中
- out.writeInt(book.getIsbn());//ObjectOutputStream中提供了写基本类型数据的方法
- //out.close();//注意,这句千万不能有,否刚将直接导致写入失败
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //这个方法会在反序列化的过程中被调用
- private void readObject(ObjectInputStream in){
- try {
- in.defaultReadObject(); //和defaultWriteObject()方法相对应,默认的反序列化方法,会从流中读取
- //非静态变量和非transient变量
- int isbn = in.readInt(); //用这个方法来读取一个int型值,这里我们是读取书号
- book = new Book(isbn); //这里我们就通过读取的 保存的状态构造 了一个和原来一样的Book对象
- //in.close();同样的这句也不能有
- } catch (IOException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
6、如果一个类没有实现Serializable接口,但是它的父类实现了,那么这个类也可以序列化。
7、如果一个类实现了Serializable接口,但是它的父类没有实现,那么这个类可以进行序列化吗?
答案是可以的,因为超类Object类没有实现Serializable接口,所以你懂了吧,但是会有个问题,你需要在父类中是实现默认的构造方法,否则会报异常:no validconstructor。
0 0
- Java序列化几点注意事项
- Java序列化几点注意事项
- Java序列化编程注意事项
- Java序列化与反序列化注意事项
- Java对象序列化/反序列化的注意事项
- java序列化格式由xml转成二进制注意事项
- java中对象序列化(Serialization)的注意事项
- 序列化注意事项
- 序列化注意事项
- 序列的注意事项
- java注意事项
- Java 注意事项
- java注意事项
- Java 注意事项
- java注意事项
- Xml序列化的注意事项
- C#序列化成XML注意事项
- 在hibernate中使用Oracle序列注意事项
- 使用ssh将linux目录挂到window下
- 基于java反射的Spring事务代理下的JUnit测试
- POJ 2299 求逆序对个数 归并排序 Or数据结构
- Python3爬虫抓取TP官网案例图片
- Thinking in C++: 第1章 为什么C++会成功
- Java序列化几点注意事项
- 欢迎使用CSDN-markdown编辑器
- 读《C#高级编程》第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但 是做事情很能坚持。 本章主要是了解.Net的结构,都是一些概念,并没有可
- 【NLP】揭秘马尔可夫模型神秘面纱系列文章(一)
- bzoj 1005 明明的烦恼 【Prufer序列】
- live()解决Jquery采用append添加的元素事件无效的
- 【NLP】揭秘马尔可夫模型神秘面纱系列文章(二)
- 算法分类
- 【NLP】揭秘马尔可夫模型神秘面纱系列文章(三)