当我阅读JDK 6.0的源代码时,我在ArrayList中找到了这两个方法。你看他们都是私人的。但在搜索之后,我没有找到任何其他方法来调用其中任何一个。我也考虑过本机方法,但仍然找不到任何方法。这两种方法似乎都处理IO,但它们从未被调用过。
所以,我的问题是,他们是如何运作的?有没有其他方法可以调用私有方法?
/**
* Save the state of the <tt>ArrayList</tt> instance to a stream (that is, serialize it).
*/
private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException;
/**
* Reconstitute the <tt>ArrayList</tt> instance from a stream (that is, deserialize it).
*/
private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException;
答案 0 :(得分:3)
这两个方法在序列化类中用于自定义序列化(aka Customize the Default Protocol)。
文章中的文字:
然而,有一个奇怪但狡猾的解决方案。通过使用内置 序列化机制的特点,开发人员可以增强 通过在其类文件中提供两个方法来实现正常过程。 那些方法是:
- private void writeObject(ObjectOutputStream out)抛出IOException;
- private void readObject(ObjectInputStream in)抛出IOException,ClassNotFoundException;
醇>请注意,这两种方法都是(并且必须)声明为私有,证明 这两种方法都没有被继承,被覆盖或重载。该 这里的技巧是虚拟机会自动检查看 如果在相应的方法调用期间声明了任一方法。该 虚拟机可以随时调用类的私有方法 想要,但没有其他对象可以。