Serializable
byte[] - Java原生
// 序列化
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("template"));
oos.writeObject(user);
oos.close();
// 反序列化
File file = new File("template");
ObjectInputStream ois = new ObjectInputStream(newFileInputStream(file));
User user = (user)ois.readObject();
UID
- 序列化和反序列化的安全校验
- 如果UID不同,不能反序列化
Translent
-
标识之后的字段不允许序列化和反序列化,字段会为空
-
// 但是可以通过writeObject和readObject重新实现字段
private void writeObject(java.io.ObjectOutputStream s) throw IOException
private void readObject(java.io.ObjectInputStram s)) throws IOException, ClassNotFoundException
序列化
xml - XStraem
XStream xStream = new XStream(new DomDriver());
// 序列化
xStream.toXML(obj);
// 反序列化
xStream.fromXML(string);
- 方便阅读
- 长度很大
- writeObject和readObject无效
json - FastJson
// 序列化
JSON.toJSONString(obj);
// 反序列化
(User)JSON.parseObject(string, User.class)
- writeObject和readObject无效
- 可以不
implement java.io.Serializable
byte[] - hessian
// 序列化
User user = new User().setName("jiangtao").setAge("19");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
HessianOutput hessianOutput = new HessianOutput(outputStream);
hessianOutput.writeObject(user);
String data = outputStream.toString();
System.out.println(data);
// 放序列化
ByteArrayInputStream inputStream = new ByteArrayInputStream(data.getBytes());
HessianInput hessianInput = new HessianInput(inputStream);
System.out.println(hessianInput.readObject(User.class));
- java原生的字节大小较大
protobuf
-
有自己的编译器和语法
-
生成一个带有序列化和反序列化的对象
-
压缩解压
-
不传属性,约定属性位置
-
ASCIII
-
Tag | [length] | value : tag为字段标识, 类型(当前字段编号<<3)
其它序列化方法: avro kyro …