gpt4 book ai didi

java - 当类实现 Serializable 接口(interface)时,为什么我会得到 java.io.NotSerializableException?

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:01 26 4
gpt4 key购买 nike

当我尝试通过调用 stashCon.stash()序列化一个对象时,我得到 java.io.NotSerializableException 即使类 StashCon 实现了 Serializable 接口(interface)。

这可能是什么原因?

public boolean connect(String username,String password) {
try {
Openfire.connection.connect();
Openfire.connection.login(username,password);
stashCon = new StashCon(Openfire.connection);
stashCon.stash(); // CALL THAT ATTEMPTS TO SERIALIZE THE OBJECT
}catch(Exception exc){
exc.printStackTrace();
return false;
}
return true;
}

以下方法属于 StashCon

public void stash() {
try {
FileOutputStream outputStream = new FileOutputStream(new File(Constants.BLAB_CONNECTION_FILE));
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
objectOutputStream.writeObject(this); // LINE 33
objectOutputStream.close();
outputStream.close();
}catch(Exception exc) {
exc.printStackTrace();
}
}

异常

java.io.NotSerializableException: org.jivesoftware.smack.XMPPConnection
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at blab.StashCon.stash(StashCon.java:33)
at blab.Openfire.connect(Openfire.java:27)
at blab.ext.gui.SignIn$4.run(SignIn.java:214)
at java.lang.Thread.run(Thread.java:619)

最佳答案

您的对象包含本身不可序列化的成员变量(org.jivesoftware.smack.XMPPConnection 的实例)。

如果你真的想序列化你的对象,你必须对那个成员变量做一些事情。一种选择是将该变量声明为 transient,这样它就不会被序列化。

然而,在反序列化时,您必须处理该成员(如重新建立连接)。为此,您可以定义在反序列化期间调用的方法 readObject。在那里您可以(并且可能应该)初始化所有 transient 成员变量以将您的对象设置为良好状态。

Here也是讨论连载的好问题。

关于java - 当类实现 Serializable 接口(interface)时,为什么我会得到 java.io.NotSerializableException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19806496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com