• MessagePack Java 0.6.X 多种类型变量的序列化和反序列化(serialization/deserialization)


    类 Packer/Unpacker 允许序列化和反序列化多种类型的变量,如后续程序所示。这个类启用序列化和反序列化多种类型的变量和序列化主要类型变量以及包装类,String 对象,byte[] 对象, ByteBuffer 对象等的方法相似。

    如上面提示的,你可以序列化和反序列化你自己的对象,前提是你自己的对象需要使用 @Message 注解。

    package com.insight.demo.msgpack;
    
    import org.junit.Test;
    import org.msgpack.MessagePack;
    import org.msgpack.packer.Packer;
    import org.msgpack.unpacker.Unpacker;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.math.BigInteger;
    import java.nio.ByteBuffer;
    
    /**
     * MessagePack6Types
     *
     * @author yhu
     */
    public class MessagePack6Types {
        final Logger logger = LoggerFactory.getLogger(MessagePack6Types.class);
    
    
        /**
         * Test MessagePack6Types
         */
        @Test
        public void testMessagePack6Types() {
            logger.debug("testMessagePack6Types for Types");
    
            MessagePack msgpack = new MessagePack();
            try {
    
                //
                // Serialization
                //
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                Packer packer = msgpack.createPacker(out);
    
                // Serialize values of primitive types
                packer.write(true); // boolean value
                packer.write(10); // int value
                packer.write(10.5); // double value
    
                // Serialize objects of primitive wrapper types
                packer.write(Boolean.TRUE);
                packer.write(new Integer(10));
                packer.write(new Double(10.5));
    
                // Serialize various types of arrays
                packer.write(new int[]{1, 2, 3, 4});
                packer.write(new Double[]{10.5, 20.5});
                packer.write(new String[]{"msg", "pack", "for", "java"});
                packer.write(new byte[]{0x30, 0x31, 0x32}); // byte array
    
                // Serialize various types of other reference values
                packer.write("MessagePack"); // String object
                packer.write(ByteBuffer.wrap(new byte[]{0x30, 0x31, 0x32})); // ByteBuffer object
                packer.write(BigInteger.ONE); // BigInteger object
    
                //
                // Deserialization
                //
                byte[] bytes = out.toByteArray();
                ByteArrayInputStream in = new ByteArrayInputStream(bytes);
                Unpacker unpacker = msgpack.createUnpacker(in);
    
                // to primitive values
                boolean b = unpacker.readBoolean(); // boolean value
                int i = unpacker.readInt(); // int value
                double d = unpacker.readDouble(); // double value
    
                // to primitive wrapper value
                Boolean wb = unpacker.read(Boolean.class);
                Integer wi = unpacker.read(Integer.class);
                Double wd = unpacker.read(Double.class);
    
                // to arrays
                int[] ia = unpacker.read(int[].class);
                Double[] da = unpacker.read(Double[].class);
                String[] sa = unpacker.read(String[].class);
                byte[] ba = unpacker.read(byte[].class);
    
                // to String object, ByteBuffer object, BigInteger object, List object and Map object
                String ws = unpacker.read(String.class);
                ByteBuffer buf = unpacker.read(ByteBuffer.class);
                BigInteger bi = unpacker.read(BigInteger.class);
    
            } catch (Exception ex) {
                logger.error("MessagePack Serialization And Deserialization error", ex);
            }
        }
    }
    

    方法 Packer#write() 允许序列化多种类型的数据。

    类 Unpacker 针对反序列化二进制数据为主要变量,提供了一个反序列化方法。例如,你希望将二进制数据反序列化为 boolean (或者 int) 数据类型,你可以使用 Unpacker 中的 readBoolean (或者 readInt) 方法。

    Unpacker 同时也为参考变量提供了一个读取的方法。这个方法允许为一个参考变量从二进制数据中进行反序列化。参考变量的定义为你将类型指定为一个参数。例如,你希望反序列化二进制数据到 String (或者 byte[]) 对象,你必须在调用 read(String.class) (或者 read(byte[].class)) 方法的时候定义描述。

    https://www.cwiki.us/display/Serialization/QuickStart+For+MessagePack+Java+0.6.X

  • 相关阅读:
    常见的eclipse和真机出现的问题
    volley+okhttp封装,一行代码就可访问网络
    android异步任务处理(网络等耗时操作)
    android手机短信获取
    Android从启动到程序运行整个过程的整理
    android中的广播
    图片旋转问题
    Android Satudio的使用记录
    百度地图初学者
    简单的图片上传和下载
  • 原文地址:https://www.cnblogs.com/huyuchengus/p/11314413.html
Copyright © 2020-2023  润新知