> For the complete documentation index, see [llms.txt](https://298073941.gitbook.io/memo/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://298073941.gitbook.io/memo/dubbo/codec.md).

# codec

#### AbstractEndpoint 这个类 是所有client和Server的抽象父类，内部有个编码器codec通过这个来序列化和反序列化

#### 查看构造器发现codec通过url来获取的

#### 看过上面spi的话，应该就很容易了解dubbo的codec编码器机制

#### dubbo默认一般使用dubbo协议，直接观看DubboProtocol类

* 查看createServer
* 发现url参数设置的CODE\_KEY为DubboCodec.NAME

所以可以推测dubboCodec是dubbo解码器和编码器，查看内部实现

#### DubboCountCodec

* 内部持有dubbocodec
* 主要讲下序列化，发现内部有个CodecSupport
* 内部核心调用getSerialization
* 也是通过spi机制，不过有个缓存已经预加载了所有序列化工具
* body序列化默认是hession2

#### dubbo请求结构

* 请求头HEAD\_LENGTH:16字节
  * MAGIC  0xdabb 2字节
  * flag
    * 高位
      * 0x20 FLAG\_EVENT
      * 0x40 FLAG\_TWOWAY
      * 0x80 FLAG\_REQUEST
    * 低位
      * 序列器id
  * 响应状态status 1字节，枚举查看response类
  * 请求id 8字节
  * DATA\_LENGTH  offSet 4字节
* 解析body，通过CodecSupport序列化

#### CodecSupport

* 里面的通过序列器id寻找序列化工具
* 查看方法可以发现使用默认hession2序列工具
