在微服务的RPC调用中,会将请求进行序列化处理,用到hessian协议做序列化。
序列化的本质,就是 用特定的二进制协议,描述和解释Java对象。
知识学习
Hessian ,基于Binary-RPC框架,能实现RPC调用,自定义的序列化机制速度快,体积小,如dubbo将其作为类库使用。
官方文档:hessian文档
第一步、引入依赖
在 POM文件中添加hessian依赖,如下所示。
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.63</version>
</dependency>
第二步、序列化工具类
序列化,即将Java对账转换为序列化的二进制。
import com.caucho.hessian.io.Hessian2Input;
/**
* @auth 梦幻通灵
* @Date 2024/8/10 17:23
**/
public class SerializeUtils {
/**
* JavaBean序列化
*/
public static <T> byte[] serialize(T javaBean) {
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Hessian2Output ho = new Hessian2Output(baos);
ho.writeObject(javaBean);
ho.flush();
return baos.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
第三步、反序列化工具类
反序列化,即将二进制恢复成原来的对账
/**
* @auth 梦幻通灵
* @Date 2024/8/10 17:23
**/
public class SerializeUtils {
import com.caucho.hessian.io.Hessian2Output;
/**
* JavaBean反序列化
*/
public static <T> T deserialize(byte[] serializeData,Class<T> clazz) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(serializeData);
Hessian2Input hi = new Hessian2Input(bais);
return (T) hi.readObject(clazz);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
第四步、测试类
定义订单bean,注意要序列化,实现Serializable。
import java.io.Serializable;
import org.projectlombok.lombok;
@Data
public class Order implements Serializable{
/**
* 序列化
*/
private static final long serialVersionUID = 6652550451095312169L;
/**
* 订单号
*/
private String orderNo;
/**
* 订单数量
*/
private Long skuNum;
}
测试类主方法,如下所示。
public static void main(String[] args){
serializeTest();
}
public static void serializeTest(){
Order order = new Order();
order.setOrderNo("123456");
order.setSkuNum(2l);
// 序列化
byte[] serialize = SerializeUtils.serialize(order);
System.out.println("序列化:"+JSON.toJSONString(serialize));
// 反序列化
Order ord = SerializeUtils.deserialize(serialize,Order.class);
System.out.println("反序列化:"+ JSON.toJSONString(ord) );
}
测试结果如下所示。
注意事项
Java对象要序列化,实现Serializable,否则会报错。
以上即Hessian序列化与反序列化,欢迎交流!