gpt4 book ai didi

java - MsgPack 第三方对象序列化

转载 作者:行者123 更新时间:2023-11-30 09:27:02 32 4
gpt4 key购买 nike

我正在尝试使用 MsgPack (Java) 序列化对象。这个对象(除其他外)包含 JodaTime 的 LocalDate 用于表示 - 好吧 - 日期。 MsgPack 无法反序列化来自 .NET 客户端的消息,因为它是非标准类型。我可以想到一种实现有效行为的非常简单的方法 - 自定义序列化为一组整数左右。但是,由于缺少 MsgPack 的文档(对于这么好的库来说这是一种耻辱),我无法找到是否有这样的选项(我希望是,...)。

有人可以给我一两个指示,告诉我在哪里看吗?

最佳答案

通过开源,您可以查看并可能复制一些代码片段。在这种情况下,我建议您查看设计良好的 MessagePack 并复制模板。

使用 MessagePack 的 Joda DateTime 自定义模板示例。以下模板将 DateTime 序列化为 Long(从 1970 年开始为 Millis)并将其反序列化为 UTC (DateTimeZone.UTC)。如果您希望保持正确的时区,可以轻松延长:

public class DateTimeSerializerTemplate extends AbstractTemplate<DateTime> {
private DateTimeSerializerTemplate() {

}

public void write(Packer pk, DateTime target, boolean required) throws IOException {
if (target == null) {
if (required) {
throw new MessageTypeException("Attempted to write null");
}
pk.writeNil();
return;
}
pk.write(target.getMillis());
}

public DateTime read(Unpacker u, DateTime to, boolean required) throws IOException {
if (!required && u.trySkipNil()) {
return null;
}
return new DateTime(u.readLong(), DateTimeZone.UTC);
}

static public DateTimeSerializerTemplate getInstance() {
return instance;
}

static final DateTimeSerializerTemplate instance = new DateTimeSerializerTemplate();

}

在您的类(class)中,只需注册上面的模板即可:

msgpack = new MessagePack();
msgpack.register(DateTime.class, DateTimeSerializerTemplate.getInstance());

关于java - MsgPack 第三方对象序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14763463/

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