通過開放源代碼,您可以查看並複製一些代碼段。在這種情況下,我建議你看看設計良好的MessagePack和複製模板。
使用MessagePack爲Joda DateTime定製模板的示例。以下模板將DateTime序列化爲Long(Millis from 1970)並將其反序列化爲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();
}
你們班剛剛註冊上面的模板:
msgpack = new MessagePack();
msgpack.register(DateTime.class, DateTimeSerializerTemplate.getInstance());
謝謝你的回覆。這是我最終做的,但在這裏忘了我的問題。所以你已經得到了答案! :) –
這個解決方案很好。但是,如果我想獲取當前時區並序列化信息。並閱讀時區信息。我怎麼能實現它? – user1438980
按照解決方案,我根據上面的說明添加一個模板。當進行調試時,寫入操作將進入自定義讀取操作,但從字節數組讀取時,將不會進入自定義讀取方法。爲什麼? – user1438980