序列化都知道,实现了Serializable接口就可以了。可 Serializable接口里面什么也没有,我实现其他的(比如我自己写的)接口是否也可以呢?答案是不可以的,问题出在ObjectOutputStream类里面。一般序列化的代码如:
A a = new A(25,"姓名");
System.out.println(a);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("c://transient.txt"));
oos.writeObject(a);
oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("c://transient.txt"));
a = (A)ois.readObject();
System.out.println(a);
而在 ObjectOutputStream 里有如下代码:
// remaining cases
if (obj instanceof String) {
writeString((String) obj, unshared);
} else if (cl.isArray()) {
writeArray(obj, desc, unshared);
} else if (obj instanceof Enum) {
writeEnum((Enum) obj, desc, unshared);
} else if (obj instanceof Serializable) {
writeOrdinaryObject(obj, desc, unshared);
} else {
if (extendedDebugInfo) {
throw new NotSerializableException(
cl.getName() + "\n" + debugInfoStack.toString());
} else {
throw new NotSerializableException(cl.getName());
}
}
显然如果要序列化的对象是一个String、Enum 对象,或者
cl.isArray()成立(数组),都可以直接序列化的。如果这些都不是,那么只能实现
Serializable 接口了。如果连Serializable 接口也没有实现,那么抛异常
参考:http://blog.csdn.net/aboy123/article/details/37930045#comments