diff --git a/src/docs/asciidoc/mgspack_0.6.x.adoc b/src/docs/asciidoc/mgspack_0.6.x.adoc index 2d91e8b..c5aaeb3 100644 --- a/src/docs/asciidoc/mgspack_0.6.x.adoc +++ b/src/docs/asciidoc/mgspack_0.6.x.adoc @@ -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 src = new ArrayList(); + 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 dst1 = msgpack.read(raw, tList(TString)); + + // Or, Deserialze to Value then convert type. + Value dynamic = msgpack.read(raw); + List dst2 = new Converter(dynamic).read(tList(TString)); + + } catch (Exception ex) { + logger.error("MessagePack Serialization And Deserialization error", ex); + } + } +} +----