文章目录
在微服务的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序列化与反序列化,欢迎交流!










