我有这个班级
public class wordObject implements java.io.Serializable
{
String wordName;
int occCount;
int count;
HashMap<Integer, Double> lineDict;
int[] mat;
public wordObject(String name,int num)
{
wordName = name;
occCount=1;
count = num;
lineDict=new HashMap<Integer,Double>(lineC);
mat = new int[lineC];
}
}
但是当我尝试使用下面给出的一段代码将类的实例写入磁盘时
public static writeObj(WordObject obj)
FileOutputStream f_out = new FileOutputStream(loc);
// Write object with ObjectOutputStream
ObjectOutputStream obj_out = new ObjectOutputStream (f_out);
// Write object out to disk,obj is instance of wordObject
obj_out.writeObject ( obj );
我收到此错误
Exception in thread "main" java.io.NotSerializableException: searchTAemd
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
欢迎任何帮助。
编辑:我已经检查过HashMap已经实现了可序列化。
答案 0 :(得分:6)
由于wordObject
是一个内部类,而内部类总是拥有对其外部类的隐式引用,因此除非外部类也可序列化,否则不能序列化内部类。实际上甚至不建议尝试;
来自serialization specification;
内部类的序列化(即,不是的嵌套类) 静态成员类),包括本地和匿名类 因为几个原因而强烈沮丧。因为内在的阶级 在非静态上下文中声明包含隐式非瞬态 引用封闭类实例,序列化这样的内部 类实例将导致其关联外部的序列化 类实例。
答案 1 :(得分:-3)
进行序列化时,对象可以访问的所有对象(即其成员变量及其成员的成员等)必须是可序列化的,否则会出现此异常。这是对象序列化的常见问题