hessian2 vs fst bytecode

class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
static class Simple implements java.io.Serializable{
private String name;
private int age;


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

static Simple getSimple() {
Simple simple = new Simple();
simple.setAge(10);
simple.setName("XiaoMing");
return simple;
}
}

hession2

class name length:52

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
data: 4d 74  0 34 63 6f 6d 2e 6a 61 73 6f 6e 2e 64 75 	 M t\0 4 c o m . j a s o n . d u
|---| |---| |----------------------------------
|---| |-- | |class-name
|Map |len:52

data: 62 62 6f 2e 70 72 6f 76 69 64 65 72 2e 73 65 72 b b o . p r o v i d e r . s e r
|----------------------------------------------
|class name

data: 76 69 63 65 2e 44 65 6d 6f 50 72 6f 76 69 64 65 v i c e . D e m o P r o v i d e
|----------------------------------------------
|class name

data: 72 24 53 69 6d 70 6c 65 53 0 4 6e 61 6d 65 53 r $ S i m p l e S\0  n a m e S
|---------------------| || |---| |---------| ||
| | || | | |field:name |S
| | || |len:4
| | |S type String
|class name

data: 0 8 58 69 61 6f 4d 69 6e 67 53 0 3 61 67 65 \0  X i a o M i n g S\0  a g e
|---| |---------------------| || |---| |------|
| | | | |S | | |field:age
| | |value:XiaoMing |len:3
|len:8

data: 49 0 0 0 a 7a
|| |---------| |end
|| |Value:10
|I:int type

fst

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
data:  0  1 34 63 6f 6d 2e 6a 61 73 6f 6e 2e 64 75 62 	\0  4 c o m . j a s o n . d u b
|| || || |-------------------------------------
| | | | class name
| | |class name len:52
| |1:not a class id, but full class name
|Type(Tab):Object

data: 62 6f 2e 70 72 6f 76 69 64 65 72 2e 73 65 72 76 b o . p r o v i d e r . s e r v
|---------------------------------------------
| class name

data: 69 63 65 2e 44 65 6d 6f 50 72 6f 76 69 64 65 72 i c e . D e m o P r o v i d e r
|----------------------------------------------
| class name

data: 24 53 69 6d 70 6c 65 a fc 8 58 69 61 6f 4d 69 $ S i m p l e\n   X i a o M i
|------------------| || || || |----------------
| | || || | |value:XiaoMi
| class name || || |len:8
| |-4: type String
|10: value for field age

data: 6e 67 0
|---| ||
|ng | end

summary

  • fst和hessian都有使用一些特殊字符来标识基本类型,如hessian:0x53(S)表示String, fst:0xfc(-4)表示String
  • hessian 以map的形式表示一个对象 Map|length of class name|classname|field|value…,
    field以S|length of field name|field name的形式表示, value以Type|value(Int), Type|length of string|value(String)的形式(其他类型未测试)
  • fst存在类名注册机制,对于注册过的类,可以使用int型的id表示,而不在需要序列化完整的类名到二进制中,相反若未注册,则序列化完整的类名(id,1 表示未注册,后接len of class name|class name)
  • fst对int类型未写入类型标识符,仅存在一个值,且根据值的大小确定写入的字节数
  • fst对于字段名没有做序列化,省出一大片空间,所以fst序列化后的格式为 class header|value|value….
  • fst&hessian都存在一个结束符 分别是0x0, 0x7a
文章目录
  1. 1. class
  2. 2. hession2
  3. 3. fst
  4. 4. summary
,