2017-01-31 20 views
0

カスタムシリアル化をテストしようとしていますが、readObject()メソッドが呼び出されていません。writeObjectメソッドを呼び出すことはできますが、 readObjectメソッド()をオーバーロードできますか?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 "); 
        } 
    } 
+0

は、「テスト」がシリアライズ可能とされていますか? – Moira

+3

あなたは 'ObjectInputStream'のインスタンスで' readObject() 'を呼び出し、' Test'のインスタンスではないことに気付きましたか? – Thomas

+0

@Thomas 'ObjectInputStream'は' Serializable'オブジェクトのプライベート 'readObject'メソッドを使います。 [別の関連する質問](http://stackoverflow.com/questions/12963445/serialization-readobject-writeobject-overides) – Moira

答えて

1

あなたreadObject方法はSerializableを実装するクラス内に常駐する必要があります。この方法では、そのクラスは、このユーザー定義の方法でオブジェクトを読み取ります。

基本的には、それが存在するかどうかわからないため、メソッドを呼び出すことはありません。

関連する問題