Java中 byte[]数组序列化和fastjson序列化区别
Java中,对于对象可以通过序列化成byte数组或者序列化成json形式,这里做下两者的对比。
首先看下实现方式:
1 byte数组序列化
这里由两个方法,一个是对象序列化为字节数组,一个是字节数组序列化为对象,这里需要注意的是对象的serialVersionUID 必须设置为一样才能序列化,否则哪怕两个类长得一模一样都会报错。
private static byte[] ObjectToByte(Object obj) {
byte[] bytes = null;
try {
// object to bytearray
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream oo = new ObjectOutputStream(bo);
oo.writeObject(obj);
bytes = bo.toByteArray();
bo.close();
oo.close();
} catch (Exception e) {
System.out.println("translation" + e.getMessage());
e.printStackTrace();
}
return bytes;
}
/**
* byte转对象
* @param bytes
* @return
*/
private static Object ByteToObject(byte[] bytes) {
Object obj = null;
try {
// bytearray to object
ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
ObjectInputStream oi = new ObjectInputStream(bi);
obj = oi.readObject();
bi.close();
oi.close();
} catch (Exception e) {
System.out.println("translation" + e.getMessage());
e.printStackTrace();
}
return obj;
}
2 fastjson序列化
这里选择了fastJson来序列化对象,实现方式如下:
public static <T> T get(String data, Class<T> clazz) {
T body = JSON.parseObject(data, clazz);
return body;
}
public static String toJson(Object o) {
return JSONObject.toJSONString(o);
}
fastJson实现方法比较简单。
下面对性能进行了对比:
类别 | 1000次 | 5000次 | 10000次 | 100000次 | 1000000次 |
---|---|---|---|---|---|
fastJson | 82ms | 147ms | 213ms | 827ms | 5707ms |
byte数组 | 114ms | 157ms | 146ms | 174ms | 412ms |
此数据来自i7 16g内存windows eclipse软件测试得来。
可以看出来在大规模数据的情况下fastJson还是非常快的。