【问题标题】:readObject method is not being called未调用 readObject 方法
【发布时间】:2017-01-31 12:25:32
【问题描述】:

我正在尝试测试自定义序列化,但没有调用 readObject() 方法。尽管我能够调用 writeObject 方法。 我们可以重载readObject方法()吗?

    public class Test {

        String pwd1 ;

        public static void main(String arg[]) throws IOException, ClassNotFoundException{

            FileInputStream fis = new FileInputStream("//vhub.lmera.ericsson.se//home//xsinkus//WDP//Desktop2k8R2//COMP_DOCS//Test//kusha1.ser");
            @SuppressWarnings("resource")
            ObjectInputStream ois = new ObjectInputStream(fis);
            System.out.println("I am being called ");
            SerilizationTest si = (SerilizationTest)ois.readObject();

            System.out.println("After called ");
            System.out.println(si.name);
            System.out.println(si.pwd);
            //si.readObject();
        }

          private void readObject(ObjectInputStream ois)
                    throws IOException, ClassNotFoundException {
              ois.defaultReadObject();
                     pwd1  = (String) ois.readObject();
                     System.out.println("I am in ");
                  }
    }

【问题讨论】:

  • 您注意到您在ObjectInputStream 的实例上调用readObject(),而不是在Test 的实例上?
  • 看起来您实际上并没有调用该方法。而且你没有重载任何东西,你只是创建了一个同名的方法。
  • @SteveSmith 这个评论是完全错误的——当然不是!它不能重载,因为它是私有的 - it is still used(如果对象是 Serializable。)
  • @1blustone 你是对的。另一个问题是这些对象是如何写入的,即文件是否实际包含所需格式的数据。
  • 另一个问题:你为什么要打电话给defaultReadObject()readObject()?根据 JavaDoc defaultReadObject() 确实“从该流中读取当前类的非静态和非瞬态字段”,即它应该读取 pwd1,因此 readObject() 应该会遇到问题。你有什么例外吗?

标签: java


【解决方案1】:

您的readObject 方法需要驻留在实现Serializable 的类中。这样,只有该类以这种用户定义的方式读取对象

基本上,它不会调用你的方法,因为它不知道它的存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多