首页 > 其他分享 >【序列化和反序列化】Hessian

【序列化和反序列化】Hessian

时间:2022-12-14 15:55:22浏览次数:58  
标签:hession Hessian io import 序列化 com hessian

1、hession序列化实现机制

hession的实现机制着重于数据,附带简单的类型信息,就像Integer=1,hession会序列化成I 1这样的流,I表示int or Integer ,1就是数据内容。而对于复杂对象,通过Java的反射机制,hession把对象所有的属性当成一个Map来序列化,产生类似M className propertyName I intValue  propertyName S stringvalue这样的流,包含了基本的类型描述和数据内容。而在序列化过程中,如果一个对象之前出现过,hession会直接插入一个R index 这样的块来表示一个引用位置,从而省去再次序列化和反序列化的时间。这样这样做的代价就是hessian需要对不同的类型进行不同的处理(因此hessian直接偷懒不支持short),而且同时因为并没有深入到实现内部去进行序列化,所以在某些场合会发生一定的不一致,比如通过Collections.synchronizedMap得到的map

官方文档:http://hessian.caucho.com/doc/hessian-serialization.html

 

2、hession使用示例

package com.chenly.serialize.hessian;

import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.io.Hessian2Output;
import com.chenly.serialize.bean.Score;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

/**
 * @author: chenly
 * @date: 2022-11-28 15:22
 * @description:
 * @version: 1.0
 */
public class HessianTest {

        public static void main(String[] args) throws Exception {

            Score object = Score.builder()
                    .className("一班")
                    .stuName("张三").course("生物").score(90).build();
            long startTime = System.currentTimeMillis();
            //序列化
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            Hessian2Output output = new Hessian2Output(os);
            output.writeObject(object);
            output.close();
            byte[] bytes = os.toByteArray();
            //反序列化
            ByteArrayInputStream in = new ByteArrayInputStream(bytes);
            Hessian2Input input = new Hessian2Input(in);
            System.out.println(input.readObject());
            input.close();
            System.out.println("耗时:"+(System.currentTimeMillis()-startTime)/1000.00);
        }
}

 

3、hession序列化使用说明

  1. 序列化对象要实现Serializable接口,否则序列化时会报must implement java.io.Serializable异常
  2. 序列化对象不需要添加serialVersionUID,即使有serialVersionUID,修改了serialVersionUID也不影响反序列化
  3. hessian会把复杂对象所有属性存储在一个 Map 中进行序列化。所以在父类、子类存在同名成员变量的情况下, Hessian 序列化时,先序列化子类,然后序列化父类,因此反序列化结果会导致子类同名成员变量被父类的值覆盖

 

标签:hession,Hessian,io,import,序列化,com,hessian
From: https://www.cnblogs.com/kiko2014551511/p/16932869.html

相关文章

  • cloudpickle —— Python分布式序列化的专用模块
    给出cloudpickle的GitHub地址:https://github.com/cloudpipe/cloudpickle    ======================================================= ......
  • 剑指Offer-Java-序列化二叉树
    题目请实现两个函数,分别用来序列化和反序列化二叉树代码此题的核心点是如何表示二叉树,并且解释。/*publicclassTreeNode{intval=0;TreeNodeleft=null;......
  • 对象的序列化和反序列化
    读写JSON格式的数据通过上面的讲解,我们已经知道如何将文本数据和二进制数据保存到文件中,那么这里还有一个问题,如果希望把一个列表或者一个字典中的数据保存到文件中又该怎......
  • 如何使用 System.Text.Json 序列化 DateTimeOffset 为 Unix 时间戳
    在.NET中,日期和时间通常使用DateTime或DateTimeOffset来表示。这两种数据类型都可以表示日期和时间,但它们之间有一些明显的区别。DateTime是不带时区信息的,而DateT......
  • C# 反序列化,支持基本数据类型处理
    C#反序列化,支持基本数据类型处理代码///<summary>///优化对基本数据的支持///</summary>///<paramname="obj"></param>......
  • 【Unity】 HTFramework框架(三十七)Inspector自定义序列化检视器
    更新日期:2020年8月21日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​Inspector自定义序列化检视器​​​​使用​​​​Dropdown下拉......
  • 序列化
     1.例子intmain(intargc,char*argv[]){usingnamespacex;Personp;p.set_name("tom");p.set_id(88);p.set_email("[email protected]");......
  • [java安全基础 01]SQL+反序列化
    tomcatServlet什么是servletJavaServlet是运行在Web服务器或应用服务器上的程序.它是作为来自Web浏览器或其他HTTP客户端的请求和HTTP服务器上的数据库或应用程序之间......
  • 剑指offer 序列化二叉树
    题目描述请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可......
  • Django自带的序列化组件
    Django自带的序列化组件(为drf做铺垫)(drf:djangorestframework)#在前端获取到,后端用户表里所有的数据,并且是列表套字典的格式#views.pyfromdjango.httpimport......