gpt4 book ai didi

java序列化

转载 作者:行者123 更新时间:2023-12-04 06:47:39 25 4
gpt4 key购买 nike

我正在尝试使用序列化将消息写入文件。消息由两个字段组成-
日期和 TibrvMsg ( TibrvMsg 是 Tibco 的专有消息,根据他们的文档,此类不可序列化)。所以我的自定义消息是:

Message msg = new Message(TibrvMsg msg)

问题是虽然我声明 Message Serializable ,我无法将其序列化为 TibrvMsg不可序列化。
所以我得到 java.io.NotSerializableException: com.tibco.tibrv.TibrvMsg异常(exception)。

最佳答案

另一种方法是使用 serialization proxy .序列化代理与使用对象的逻辑状态序列化的对象完全不同。 Object readResolve() 方法写一个代理而不是这个对象,并通过读取代理创建一个对象。

一些半伪代码:

class Message implements Serializable {

private Date dt;
private TibrvMsg msg;

private Object writeReplace() {
return new Proxy(this);
}

private static class Proxy implements Serializable {
private Date dt;
private Map msgData;

Proxy(Message msg) {
this.dt = msg.dt;
this.msgData = doTransform(msg.msg, "UTF-16");
}

private Object readResolve() {
Message msg = new Message();
msg.dtd = dt;
msg.msg = asTibrvMsg(msgData);
return msg;
}
}
}

另外重写 readObject(ObjectInputStream) 以抛出 InvalidObjectException。序列化代理模式也有一定的安全性 advantages超过正常的序列化。它还有几个 disadvantages

关于java序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545243/

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