Hessian序列化在Java中通过Hessian2Output/Hessian2Input实现高效二进制编解码,要求类实现Serializable接口但无需serialVersionUID,支持循环引用与字段变更兼容,需引入com.caucho:hessian:4.0.66+依赖。

Hessian 序列化在 Java 中使用简单,核心是把对象转成二进制字节流(序列化),再从字节流还原为对象(反序列化)。它不依赖反射元数据,而是基于字段名匹配,因此对类结构变更较友好,且性能优于原生 Java 序列化。
添加 Maven 依赖
项目需引入 Hessian 官方库。推荐使用较新稳定版(如 4.0.66 或更高):
被序列化类的要求
目标类必须实现 java.io.Serializable 接口,否则运行时会抛出异常。不需要定义 serialVersionUID,Hessian 不依赖该字段。
例如:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
立即学习“Java免费学习笔记(深入)”;
public class User implements Serializable {private String name;
private int age;
// getter/setter 省略
}
执行序列化与反序列化
使用 Hessian2Output 和 Hessian2Input(比老版 HessianOutput/HessianInput 更高效、更常用):
- 序列化:创建
ByteArrayOutputStream→ 包装为Hessian2Output→ 调用writeObject() - 反序列化:将字节数组转为
ByteArrayInputStream→ 包装为Hessian2Input→ 调用readObject() - 注意:
readObject()返回的是Object,需手动强转为具体类型
示例代码片段:
public static byte[] hessianSerialize(Object obj) {try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
Hessian2Output out = new Hessian2Output(bos)) {
out.writeObject(obj);
return bos.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static
try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
Hessian2Input in = new Hessian2Input(bis)) {
return type.cast(in.readObject());
} catch (IOException e) {
throw new RuntimeException(e);
}
}
常见注意事项
- 集合、数组、Map、自定义对象(含嵌套)均原生支持,无需额外配置
- 支持循环引用,不会因对象图闭环而报错
- 字段顺序无关,新增字段不影响旧数据反序列化(新字段取默认值)
- 生产环境建议配合 HTTPS 使用,避免反序列化漏洞风险(尤其禁用不可信输入)

















