关于对象序列化与反序列化的那些事

java 自带的 serializable 序列化接口在这里就不再多说,下面介绍MessagePack ,与json的序列化对比,

首先创建我们需要序列化的bean

public class UserInfo implements Serializable {
    private String name;
    private String gender;
    private Integer age;

    public UserInfo(String name, String gender, Integer age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public UserInfo() {

    }

    @Override
    public String toString() {
        return "[" + name + "," + age + "," + gender + "]";
    }
}
  1. MessagePack 是一个高效的二进制序列化框架,它像JSON一样支持不同的语言间的数据交换,但是他的性能更快,序列化之后的码流也更小。得到了业界的广泛应用

    org.msgpack
    msgpack
    0.6.6

编写单元测试代码:

   @Test
    public void test01() throws IOException {
        UserInfo userInfo = new UserInfo();
        userInfo.setName("wjf");
        userInfo.setGender("男");
        userInfo.setAge(21);
        //序列化
        MessagePack encoder = new MessagePack();
        byte[] raw = encoder.write(userInfo);
        System.out.println("序列化后的byte长度:" + raw.length);
        //反序列化
        MessagePack decoder = new MessagePack();
        UserInfo user = decoder.read(raw, UserInfo.class);
        System.out.println("反序列化后的对象:" + user);
    }

运行结果:
序列化后的byte长度:10
反序列化后的对象:[wjf,21,男]

  1. json 序列化,json 在当下程序设计中使用非常广泛,而且在对象序列化中使用频率也比较高,例如:我们经常讲对象转为json 串在redis中进行存储等
```   
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>
   @Test
    public void test02() {
        UserInfo userInfo = new UserInfo();
        userInfo.setName("王巨峰");
        userInfo.setGender("男");
        userInfo.setAge(21);
        String s = JSON.toJSONString(userInfo);

        byte[] jsonByte = s.getBytes();
        System.out.println("json序列化byte长度:" +       jsonByte.length);
    }

运行结果:json序列化byte长度:38

由结果可知,messagepack 与json 相比,优势非常明显,序列化之后的二进制码流更小,但是json 就是使用起来比较方面。所以在小对象进行序列化时,二者任意使用,但是在对大对象进行序列化时,就要考虑序列化之后的二进制码流,毕竟服务器的容量有限,网速也是有限的,我们要提高效率与利用率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值