序列化目的
对象序列化后可进行远程传输与存储,需要实现Serializable
接口
-
serialVersionUID
反序列化时通过serialVersionUID判断接收数据对象与序列化时是否发生变化 -
transient
关键字
修饰的属性不会被序列化与反序列化
一般结合
private void writeObject(java.io.ObjectOutputStream s)
private void readObject(java.io.ObjectInputStream s)
使用来自定义字段的序列化过程,通过反射调用这两个方法
序列化方式
- java原生方式
public byte[] serialize(Object obj){
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(obj);
return byteArrayOutputStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return new byte[0];
}
public Object deserialize(byte[] data){
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data);
try {
ObjectInputStream objectOutputStream = new ObjectInputStream(byteArrayInputStream);
return objectOutputStream.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
- xml/json/hession/avro/kyro/protobuf/...
序列化考量要素
- 序列化计算性能
- 数据包的大小
- 跨语言
网友评论