谈谈J2SE中的序列化(二)

当序列化遇到继承…
当一个父类实现Serializable接口后,他的子类都将自动的实现序列化。
以下验证了这一点:
package Serial;
import java.io.Serializable;
public class SuperC implements Serializable {//父类实现了序列化
int supervalue;
public SuperC(int supervalue) {
this.supervalue = supervalue;
}
public String toString() {
return "supervalue: "+supervalue;
}
}
public class SubC extends SuperC {//子类
int subvalue;
public SubC(int supervalue,int subvalue) {
super(supervalue);
this.subvalue=subvalue;
}
public String toString() {
return super.toString()+" sub: "+subvalue;
}
}
public class Test1 {
public static void main(String [] args){
SubC subc=new SubC(100,200);
FileInputStream in=null;
FileOutputStream out=null;
ObjectInputStream oin=null;
ObjectOutputStream oout=null;
try {
out = new FileOutputStream("Test1.txt");//子类序列化
oout = new ObjectOutputStream(out);
oout.writeObject(subc);
oout.close();
oout=null;
in = new FileInputStream("Test1.txt");
oin = new ObjectInputStream(in);
SubC subc2=(SubC)oin.readObject();//子类反序列化
System.out.println(subc2);
} catch (Exception ex){
ex.printStackTrace();
} finally{
…此处省略
}
}
}
运行结果如下:
supervalue: 100 sub: 200
可见子类成功的序列化/反序列化了。
怎管让子类实现序列化看起来是一件很简单的事情,但有的时候,往往我们不能够让父类实现Serializable接口,原因是有时候父类是抽象的(这并没有关系),并且父类不能够强制每个子类都拥有序列化的能力。换句话说父类设计的目的仅仅是为了被继承。

时间: 2024-11-08 23:18:27

谈谈J2SE中的序列化(二)的相关文章

谈谈J2SE中的序列化之当序列化遭遇继承

j2se|继承 运行结果证明了这种方法是正确的.在此处我们用到了writeObject/ readObject方法,这对方法如果存在的话,序列化时就会被调用,以代替默认的行为(以后还要探讨,先了解这么多).我们在序列化时,首先调用了ObjectOutputStream的defaultWriteObject,它使用默认的序列化行为,然后序列化父类的域:反序列化的时候也一样. 归纳一下: 目的 行为 为一个实现Serializable接口的父类,编写一个能够序列化的子类 子类将自动的实现序列化 为一

谈谈J2SE中的序列化(三)

何时接受默认的java序列化行为首先要了解java默认的序列化行为,java将一切关于对象的信息都保存了下了,也就是说,有些时候那些不需要保存的也被保存了下来.一般情况下,我们仅仅需要保存逻辑数据就可以了.不需要保存的数据我们可以用关键字transient标出.以下是一个例子:import java.io.*;public class Serial implements Serializable { int company_id; String company_addr; transient b

对J2SE中的序列化的一个感性的认识

java中处处体现着简单的程序设计风格,序列化作为最常用的功能之一,在java中的设计尤为"简单".在ObjectInputStream 和ObjectOutputStream的帮助下,我们可以轻松的实现序列化. 只要我们的class 实现了java.io.Serializable接口,就可以利用ObjectOutputStream的writeObject()方法将一个对象序列化:利用ObjectInputStream的readObject()方法,可以返回读出的object对象.Se

J2SE中的序列化的认识_JSP编程

java中处处体现着简单的程序设计风格,序列化作为最常用的功能之一,在java中的设计尤为"简单".在ObjectInputStream 和ObjectOutputStream的帮助下,我们可以轻松的实现序列化. 只要我们的class 实现了java.io.Serializable接口,就可以利用ObjectOutputStream的writeObject()方法将一个对象序列化:利用ObjectInputStream的readObject()方法,可以返回读出的object对象.Se

J2SE中的序列化之继承_JSP编程

当一个父类实现Serializable接口后,他的子类都将自动的实现序列化. 以下验证了这一点: package Serial; import java.io.Serializable; public class SuperC implements Serializable {//父类实现了序列化 int supervalue; public SuperC(int supervalue) { this.supervalue = supervalue; } public String toStri

.Net中的序列化和反序列化详解_实用技巧

序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net Frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的一些理解. 一.什么序列化和反序列化序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就可以轻松保存在磁盘文件或数据库中.反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程. 然而为什么需要序列化和反序列化这样的机制呢?这个问题也就涉及到序列化和反序列化的用途了, 对于序列化的主要

java-求助,Java中对象序列化的作用是什么?

问题描述 求助,Java中对象序列化的作用是什么? Java中对象序列化的作用是什么?求大神相助,希望能全面一点哦.急求大神解答 解决方案 简单来说,对象像一颗树,里面有字段,如果字段是类型,那么它还有自己的字段. 但是网络传输.保存文件,都必须是线性的,连续的. 序列化就是把这棵树拍扁,成为一个序列的过程. 反序列化就是从一个序列中重新把这颗树拉回来的过程. 解决方案二: 把一个对象,转成流数据,对方根据这个数据还原成初始对象,适用于不同对象间的传输,通讯 解决方案三: 序列化多用于网络IO通

我的WCF之旅(4):WCF中的序列化[上篇]

SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA)的一种理想的分布式技术(Distributed Technology), 相信在今后在建立基于SOA企业级别的解决方案和进行系统集成方面将会大有作为.一个基于SOA结构的互联系统(Connected System)通常由若干相互独立的子系统(Sub-System)组成,这些子系统可能一个独立的App

java-Java中的序列化与反序列化 序列号的问题

问题描述 Java中的序列化与反序列化 序列号的问题 不太明白 在序列化时为类添加 serialVersionUID 的意义,是说添加了这个field之后, 在反序列化时检测到 这个值变化了,就会反序列化成 上一个版本的这个类? 否则在没有它的时候类发生变化反序列化时报错的话,添加了它不也是一样的报错? 这个是怎么回事呢? 解决方案 http://www.cnblogs.com/guanghuiqq/archive/2012/07/18/2597036.html 解决方案二: 用来检查对象状态是