2015-04-06 78 views
1

我使用2類RSAKeyPack.java和SerialVersionUIDTest.java無法序列化我的類對象

我的問題是,我無法序列RSAKeyPack的對象。

堆棧跟蹤:

java.io.NotSerializableException: java.security.KeyPairGenerator$Delegate 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) 
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) 
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) 
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) 
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) 
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) 
at FADE.SerialVersionUIDTest.main(SerialVersionUIDTest.java:43) 
public class RSAKeyPack implements Serializable { //Object to be serialized 

    private static final long serialVersionUID = 2L; 
    PublicKey publicKey; 
    PrivateKey privateKey; 
    KeyPairGenerator keyPairGenerator; 
    public RSAKeyPack() 
    { 
     try 
     { 
      keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 
      keyPairGenerator.initialize(2048); //1024 used for normal securities 
      KeyPair keyPair = keyPairGenerator.generateKeyPair(); 
      publicKey = keyPair.getPublic(); 
      privateKey = keyPair.getPrivate();   
     } 
     catch (NoSuchAlgorithmException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

是KeyPairGenerator的是什麼問題? 它是一個抽象類嗎?

回答

2

keyPairGenerator可能不是可序列化的。

創建該字段transient,然後爲其添加一個懶惰初始化程序getter。

或者將其完全移除,只需在需要時直接使用KeyPairGenerator.getInstance("RSA")即可。

transient KeyPairGenerator keyPairGenerator; 

private KeyPairGenerator getGenerator() { 
    if (keyPairGenerator == null) { 
     keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 
     keyPairGenerator.initialize(2048); //1024 used for normal securities 
     ... 
    } 
    return keyPairGenerator; 
} 
+0

當你回答它時(我做了這個),不要忘了編輯問題。有它的徽章! –

+0

謝謝adapt-dev ....它的工作..是否有可能存儲和檢索對象到數據庫(公鑰和私鑰)。 –