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 + "]";
}
}
- 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,男]
- 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 就是使用起来比较方面。所以在小对象进行序列化时,二者任意使用,但是在对大对象进行序列化时,就要考虑序列化之后的二进制码流,毕竟服务器的容量有限,网速也是有限的,我们要提高效率与利用率。