Java序列化之Hessian实现方案


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值