Serializable:writeObject/readObject有的限制?

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是合法的,但是不推荐这样做。

你可能感兴趣的:(java)