writeObject/readObject的实现有没有什么限制?答案是语法层面没有任何限制。
比如说如下面这样:
private void writeObject(ObjectOutputStream out) throws IOException
{
System.out.println("这里的方法吧?");
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
System.out.println("确实是调用这里的方法!");
}
测试程序:
public void testOut() throws FileNotFoundException, IOException {
PeopleName luren01 = new PeopleName("james","de","bang");
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("D:\\temp.txt"));
out.writeObject(luren01);
out.flush();
out.close();
}
@Test
public void testIn() throws FileNotFoundException, IOException, ClassNotFoundException {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("D:\\temp.txt"));
in.readObject();
in.close();
}
结果这两个writeObject/readObject并没有语法错误,在序列化、反序列化过程中依然被调用了,只是它并没有实际的完成序列化和反序列化的工作。
序列化框架只是实现了会回调序列化对象的writeObject/readObject方法,但是对方法的实现其实并没有限制。
正常功能的的writeObject/readObject虽然从技术角度而言,不调用defaultWriteObject/defaultReadObject是合法的,但是不推荐这样做。