求助:一个java中的序列化机制

weicai_chen 2007-03-09 10:53:49
在java中,一个父类(SpuerC)没有实现serivalizable接口,它的子类(SubC)怎么样才能序列化?

我的程序如下,运行时产生如下错误:

java.io.NotSerializableException: InherSerialTest2.SubC
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at InherSerialTest2.InherSerialTest2.main(InherSerialTest2.java:21)

怎么样才能让SubC能序列化?


程序源码如下:

SuperC 类:

package InherSerialTest2;

public abstract class SuperC {

int supervalue;

public SuperC(int supervalue) {
super();
// TODO Auto-generated constructor stub
this.supervalue = supervalue;
}

public SuperC(){//必须要有无参构造函数

}

public int getSupervalue() {
return supervalue;
}

public void setSupervalue(int supervalue) {
this.supervalue = supervalue;
}

public String toString() {
// TODO Auto-generated method stub
return "supervalue : " + supervalue;
}

}


SubC 类

package InherSerialTest2;

import java.io.IOException;
import java.io.ObjectInputStream;

import InherSerialTest.SuperA;

public class SubC extends SuperC {

private int subvalue;

public SubC(int supervalue, int subvalue) {
super(supervalue);
// TODO Auto-generated constructor stub
this.subvalue = subvalue;
}

public int getSubvalue() {
return subvalue;
}

public void setSubvalue(int subvalue) {
this.subvalue = subvalue;
}

public String toString() {
// TODO Auto-generated method stub
return super.toString() + " ,subvalue :" + subvalue;
}

private void writeObject(java.io.ObjectOutputStream oos)throws IOException{

//先序列化对象
oos.defaultWriteObject();
//在序列化父类的域
oos.writeInt(supervalue);
}

private void readObject(ObjectInputStream ois)throws IOException, ClassNotFoundException{

//先反序列化对象
ois.defaultReadObject();
//再反序列化父类的域
supervalue = ois.readInt();
}
}



测试程序:

package InherSerialTest2;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class InherSerialTest2 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

SubC sub = new SubC(100, 500);

try{
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("c:\\InherSerialTest2.txt"));
oos.writeObject(sub);
oos.close();

ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("c:\\InherSerialTest2.txt"));
SubC sub2 = (SubC) ois.readObject();
System.out.println(sub2);
ois.close();
}catch(Exception e){
e.printStackTrace();
}
}

}

多谢了!




...全文
267 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kekeemx 2007-03-12
  • 打赏
  • 举报
回复
楼主还是应该去把JAVA基础复习一遍的好吧.....我最近也准备再去复习一遍基础.呵呵
kekeemx 2007-03-12
  • 打赏
  • 举报
回复
如果是扩展interface当然就需要重写里边的所有方法了。
如果只是继承父类的话,没必要重写父类中的方法,但是可以覆盖掉父类中的方法
weicai_chen 2007-03-12
  • 打赏
  • 举报
回复
对了,

子类SubC是不是一定要重写writeObject()和readObject()这两个方法?

我测试了一下,好些没有重写这两个方法,程序也运行成功,


为什么?

weicai_chen 2007-03-12
  • 打赏
  • 举报
回复
是的,子类实现接口serivalizable就行了,的确是这样的

谢谢了
yqh2009 2007-03-10
  • 打赏
  • 举报
回复
只要子类实现接口serivalizable,不就行了吗?

public class SubC extends SuperC imelemenets serivlizable
mepjava 2007-03-10
  • 打赏
  • 举报
回复
序列化不是接口吗,和父类没关系吧
frilly 2007-03-10
  • 打赏
  • 举报
回复
子类实现接口serivalizable就行了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧