当前位置:网站首页>Analysis of Hessian serialization principle
Analysis of Hessian serialization principle
2022-07-07 08:57:00 【bboyzqh】
List of articles
1. hessian Serialization example
1.1 hessian Protocol Brief
1.1.1 characteristic
Refer to the description in the official document , Here are some brief descriptions ,http://hessian.caucho.com/doc/hessian-serialization.html.
- It must self describe the serialization type , That is, no external schema or interface definition is required
- It must be language independent , Including support for scripting languages
- It must be able to read and write in a single way
- It must be as compact as possible
- It must be simple , Only in this way can we effectively test and implement
- Must be as fast as possible
- It has to support Unicode character string
- It has to support 8 Bit binary data , There is no need to escape or use attachments
- It must support encryption 、 Compress 、 Signature and transaction context envelopes
1.1.2 hessian Syntactic introduction
The following examples , More reference :http://hessian.caucho.com/doc/hessian-serialization.html.
#boolean true/false
boolean ::= 'T'
::= 'F'
# list/vector
list ::= 'V' type? length? value* 'z'
::= 'v' int int value* # first int Represents a type reference , the second int Length
#32-bit signed int ( such as 0x90 Encoded as 0)
int ::= 'I' b3 b2 b1 b0
::= [x80-xbf] #-x10 to x3f
::= [xc0-xcf] b0 #-x800 to x7ff
::= [xd0-xd7] b1 b0 #-x40000 to x3ffff
1.2 hessian Examples of serialization and deserialization
public static void serialize1(Student student){
FileOutputStream fileOutputStream;
try {
fileOutputStream = new FileOutputStream("/Users/zhuqiuhui/Desktop/studentHession.txt");
// Get byte stream from object
ByteArrayOutputStream os = new ByteArrayOutputStream();
Hessian2Output output = new Hessian2Output(os);
output.writeObject(student);
output.getBytesOutputStream().flush();
output.completeMessage();
output.close();
// Write to a file
fileOutputStream.write(os.toByteArray());
} catch (Exception e) {
e.printStackTrace();
}
}
public static Student deserialize1(){
FileInputStream fileInputStream;
Object result = null;
try {
fileInputStream = new FileInputStream("/Users/zhuqiuhui/Desktop/studentHession.txt");
byte[] data = new byte[1024];
int len = fileInputStream.read(data);
System.out.println("read byte length:" + len);
// Read the object from the stream
ByteArrayInputStream is = new ByteArrayInputStream(data);
Hessian2Input input = new Hessian2Input(is);
result = input.readObject();
} catch (Exception e) {
e.printStackTrace();
}
return (Student)result;
}
public static void main(String[] args) {
Student student = new Student();
student.setId("123");
student.setName(" Fang Chen ");
// serialize
// serialize1(student);
// Deserialization
Student serializestudent = deserialize1();
System.out.println("deserialize result entity id is "+serializestudent.getId());
System.out.println("deserialize result entity name is "+serializestudent.getName());
}
1.3 hessian Deal with the jdk difference
- Difference one :java Serialization cannot cross language
- Difference two : Versions of old and new objects Java Through one serialVersionUID To relate , Developers need to pay attention to the semantics of serialization
- Difference three :java Serialization does not support encryption
- Difference 4 :Java Serialized content ratio hessian Big
2. hessian Serialization analysis
2.1 hessian Serialization must serialVersionUID Do you ?
hessian Serialized objects do not need to be added serialVersionUID,hessian When serializing, write the description information of the class to byte[] in
2.2 hessian Serialization and deserialization source code analysis
2.2.1 ( back ) The corresponding relationship of serializers
| type | Serializer | Deserializer |
|---|---|---|
| Collection | CollectionSerializer | CollectionDeserializer |
| Map | MapSerializer | MapDeserializer |
| Iterator | IteratorSerializer | IteratorDeserializer |
| Annotation | AnnotationSerializer | AnnotationDeserializer |
| Interface | ObjectSerializer | ObjectDeserializer |
| Array | ArraySerializer | ArrayDeserializer |
| Enumeration | EnumerationSerializer | EnumerationDeserializer |
| Enum | EnumSerializer | EnumDeserializer |
| Class | ClassSerializer | ClassDeserializer |
| Default | JavaSerializer | JavaDeserializer |
| Throwable | ThrowableSerializer | |
| InputStream | InputStreamSerializer | InputStreamDeserializer |
| InetAddress | InetAddressSerializer |
2.2.2 Why serialize objects implements Serializable Interface ?
// com.caucho.hessian.io.SerializerFactory The default serializer will be obtained when serializing
protected Serializer getDefaultSerializer(Class cl) {
if (_defaultSerializer != null)
return _defaultSerializer;
// If the serialized object is not implemented Serializable Interface , It will be thrown out. IllegalStateException
if (! Serializable.class.isAssignableFrom(cl)
&& ! _isAllowNonSerializable) {
throw new IllegalStateException("Serialized class " + cl.getName() + " must implement java.io.Serializable");
}
if (_isEnableUnsafeSerializer
&& JavaSerializer.getWriteReplace(cl) == null) {
return UnsafeSerializer.create(cl);
}
else
return JavaSerializer.create(cl);
}
2.2.3 Serialization process and deserialization process
- Serialization process :Hessian2Output -> SerializerFactory -> Serializer
- Deserialization process :Hessian2Input -> SerializerFactory -> Deserializer
2.3 summary
- Serialize objects to achieve Serializable Interface , Otherwise, it will report “must implement java.io.Serializable” abnormal
- If the serialized object passes hessian After serialization , Serialized object without serialVersionUID when , Re change ( Add object properties 、 Delete object properties ) Will not generate deserialization exceptions , namely hessian Serializing objects no longer requires serialVersionUID.
- hessian It stores all the attributes of a complex object in one Map Serialization in . So in the parent class 、 When a subclass has a member variable with the same name , Hessian Serialization , Serialize subclasses first , Then serialize the parent class , Therefore, the result of deserialization will cause the member variable with the same name of the child class to be overwritten by the value of the parent class .
- hessian Medium writeReplace Methods and readResolve The method works the same , If the serialized object has this method , The instance returned by this method will be used to replace the serialized instance , To ensure the singleness of the object .
边栏推荐
- ncs成都新電面試經驗
- About using CDN based on Kangle and EP panel
- Three usage scenarios of annotation @configurationproperties
- How to add a mask of a target in a picture
- 最长上升子序列模型 AcWing 1017. 怪盗基德的滑翔翼
- How to count the number of project code lines
- 【Istio Network CRD VirtualService、Envoyfilter】
- 硬件大熊原创合集(2022/06更新)
- let const
- 如何统计项目代码行数
猜你喜欢

NCS Chengdu Xindian interview experience

PPT模板、素材下载网站(纯干货,建议收藏)
![[Yugong series] February 2022 U3D full stack class 006 unity toolbar](/img/2e/3a7d71a0b5a6aff294a0bd2f8515f8.jpg)
[Yugong series] February 2022 U3D full stack class 006 unity toolbar

A bug using module project in idea

Greenplum6.x-版本变化记录-常用手册
![[Nanjing University] - [software analysis] course learning notes (I) -introduction](/img/57/bf652b36389d2bf95388d2eb4772a1.png)
[Nanjing University] - [software analysis] course learning notes (I) -introduction

Led analog and digital dimming

Count sort (diagram)

2022-07-06 Unity核心9——3D动画

Troublesome problem of image resizing when using typora to edit markdown to upload CSDN
随机推荐
Greenplum6.x-版本变化记录-常用手册
Required String parameter ‘XXX‘ is not present
let const
NCS Chengdu New Electric interview Experience
PPT模板、素材下载网站(纯干货,建议收藏)
模拟卷Leetcode【普通】1609. 奇偶树
Mock. JS usage details
MySQL partition explanation and operation statement
Analysis of using jsonp cross domain vulnerability and XSS vulnerability in honeypot
对API接口或H5接口做签名认证
Unity Shader入门精要初级篇(一)-- 基础光照笔记
Unityshader introduction essentials personal summary -- Basic chapter (I)
A bug using module project in idea
Unity shader beginner's Essentials (I) -- basic lighting notes
Un salaire annuel de 50 W Ali P8 vous montrera comment passer du test
数字三角形模型 AcWing 1027. 方格取数
Greenplum6.x搭建_环境配置
Digital triangle model acwing 275 Pass a note
Gson转换实体类为json时报declares multiple JSON fields named
JS operation