motan原始碼分析七 序列化

2021-07-29 18:53:16 字數 3167 閱讀 6594

motan的序列化支援兩種協議,一種是json,另一種是hessian2。主要涉及到的類和介面是是:fastjsonserialization、hessian2serialization、serialization、codec、abstractcodec、nettydecoder、nettyencoder、defaultrpccodec和compressrpccodec等。

1.fastjsonserialization使用json作為資料交換協議,hessian2serialization使用hessian2作為資料交換協議

@spimeta(name = "hessian2")

public

class hessian2serialization implements

serialization

@suppresswarnings("unchecked")

@override

public

t deserialize(byte data, classclz) throws

ioexception

}

2.motan支援壓縮和非壓縮兩種方式

public

byte encode(channel channel, object message) throws

ioexception

else

}public

byte encodev2(channel channel, object message) throws

ioexception

else

if (message instanceof

response)

} catch

(exception e)

else

}throw

new motanframeworkexception("encode error: message type not support, " +message.getclass(),

motanerrormsgconstant.framework_encode_error);

}private

byte encoderequest(channel channel, request request) throws

ioexception

}if (request.getattachments() == null ||request.getattachments().isempty())

else

output.flush();

byte body =outputstream.tobytearray();

byte flag =motanconstants.flag_request;

output.close();

boolean usegz =channel.geturl().getbooleanparameter(urlparamtype.usegz.getname(), urlparamtype.usegz.getbooleanvalue());

int mingzsize =channel.geturl().getintparameter(urlparamtype.mingzsize.getname(), urlparamtype.mingzsize.getintvalue());

return

encode(compress(body, usegz, mingzsize), flag, request.getrequestid());//壓縮處理

}

3.通過nettydecoder和nettyencoder與netty框架進行結合

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

protectedobject encode(channelhandlercontext ctx, channel nettychannel, object message)throwsexceptioncatch(exception e)

}else

bytetransportheader =newbyte[motanconstants.netty_header];

byteutil.short2bytes(motanconstants.netty_magic_type, transportheader,0);

transportheader[3] = gettype(message);

byteutil.long2bytes(getrequestid(message), transportheader,4);

byteutil.int2bytes(data.length, transportheader,12);

return

}

A08 序列化與反序列化

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace a01 serializeanddeserialize s...

STL原始碼分析3 序列式容器

喜歡這篇文章嗎?喜歡的話去看博主的置頂部落格,即可依據分類找到此文章的原版得到更好的體驗,title stl原始碼分析3 序列式容器 mathjax true date 2020 03 24 20 39 33 categories c 筆記,stl原始碼分析 tags c 筆記,stl原始碼分析 k...

C 語言 08 序列化與反序列化

a.序列化 是將物件的狀態儲存到特定儲存介質中的過程 i.語法 public void serialize 序列化過程的檔案流,儲存的物件 b.返序列化 是從特定儲存介質中將資料重新構建物件的過程 i.語法 public object deserialize 檔案流 i.注意 deserialize...