添加完整的代码
This commit is contained in:
parent
b84cd2d94b
commit
1543c67894
|
@ -454,3 +454,105 @@ public class MessagePack6Template {
|
||||||
}
|
}
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
=== 不使用注解(annotations)来序列化
|
||||||
|
如果你不能添加 @Message 到你的定义对象中但是你还是希望进行序列化。你可以使用 register 方法来在类中启用序列化对象。
|
||||||
|
|
||||||
|
如下的代码所示:
|
||||||
|
|
||||||
|
[source,java]
|
||||||
|
----
|
||||||
|
MessagePack msgpack = new MessagePack();
|
||||||
|
msgpack.register(MyMessage2.class);
|
||||||
|
----
|
||||||
|
|
||||||
|
例如,如果 MyMessage2 类被包含到了外部的库中了。你没有办法比较容易的编辑源代码,添加 '_@Message_' 到源代码中。
|
||||||
|
|
||||||
|
register 方法能够允许为 MyMessage2 自动创建一个 serializer 和 deserializer 对。
|
||||||
|
|
||||||
|
你可以在执行方面后序列化对象 MyMessage2。
|
||||||
|
|
||||||
|
=== 可选字段
|
||||||
|
你可添加一个新的字段来保持可用性。在新字段中使用 '_@Optional_' 注解。
|
||||||
|
|
||||||
|
[source,java]
|
||||||
|
----
|
||||||
|
@Message
|
||||||
|
public static class MyMessage {
|
||||||
|
public String name;
|
||||||
|
public double version;
|
||||||
|
|
||||||
|
// new field
|
||||||
|
@Optional
|
||||||
|
public int flag = 0;
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
如果你尝试反序列化老版本数据的话,可选字段将会被忽略。
|
||||||
|
|
||||||
|
=== 动态类型
|
||||||
|
我们知道 Java 是一个静态类型的语言。通过输入 '_Value_' MessagePack能够实现动态的特性。
|
||||||
|
|
||||||
|
'_Value_' 有方法来检查自己的类型('_isIntegerType()_', '_isArrayType()_', 等...),同时也转换为自己的类型 ('_asStringValue()_', '_convert(Template)_')。
|
||||||
|
|
||||||
|
本代码可以在 https://github.com/cwiki-us-demo/messagepack-6-demo-java/blob/master/src/test/java/com/insight/demo/msgpack/MessagePack6DynamicTyping.java 中查看。
|
||||||
|
|
||||||
|
[source,java]
|
||||||
|
----
|
||||||
|
package com.insight.demo.msgpack;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.msgpack.MessagePack;
|
||||||
|
import org.msgpack.type.Value;
|
||||||
|
import org.msgpack.unpacker.Converter;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.msgpack.template.Templates.TString;
|
||||||
|
import static org.msgpack.template.Templates.tList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MessagePack6Objects
|
||||||
|
*
|
||||||
|
* @author yhu
|
||||||
|
*/
|
||||||
|
public class MessagePack6DynamicTyping {
|
||||||
|
final Logger logger = LoggerFactory.getLogger(MessagePack6DynamicTyping.class);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test MessagePack6Objects
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void MessagePack6DynamicTyping() {
|
||||||
|
logger.debug("MessagePack6Objects for Objects");
|
||||||
|
|
||||||
|
// Create serialize objects.
|
||||||
|
List<String> src = new ArrayList<String>();
|
||||||
|
src.add("msgpack");
|
||||||
|
src.add("kumofs");
|
||||||
|
src.add("viver");
|
||||||
|
|
||||||
|
MessagePack msgpack = new MessagePack();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
// Serialize
|
||||||
|
byte[] raw = msgpack.write(src);
|
||||||
|
|
||||||
|
// Deserialize directly using a template
|
||||||
|
List<String> dst1 = msgpack.read(raw, tList(TString));
|
||||||
|
|
||||||
|
// Or, Deserialze to Value then convert type.
|
||||||
|
Value dynamic = msgpack.read(raw);
|
||||||
|
List<String> dst2 = new Converter(dynamic).read(tList(TString));
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
logger.error("MessagePack Serialization And Deserialization error", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
Loading…
Reference in New Issue