我们知道 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 中查看。
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*/@Testpublic 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 {// Serializebyte[] raw = msgpack.write(src);// Deserialize directly using a templateList<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);}}
}
https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X