添加完整的代码
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