参考文献:极客时间傅健老师的《Netty源码剖析与实战》Talk is cheap.show me the code!
Netty对编解码的支持
打开Netty的源码,它对很多的编码器都提供支持,如图
随便点开一个看看,比如bytes包下的ByteArrayDecoder.java
可以看出ByteArratDecoder.java只有一个decode()方法;其中它有个"ByteBuf msg"的参数,这个msg是io.netty.buffer.ByteBuf,那这个类的作用就见其名了,是将Netty的Bytebuf转换成jdk里的字节数组。
再来看一看Netty支持的序列化,找到serialization包下的ObjectEncoder.java,如图:
图中的第48行的“CompactObjectOutputStream”,其中Compact是压缩的意思,意味着它的大小肯定比java的序列化要小,点进去验证一下
首先看倒数的2行代码,倒数第一行只给一个类的“Name”,这点在反序列化(用发射)时就会用到,倒数第二行代码相比较JDK少了元信息,如下图是JDK的元信息:
所以这么一对比才体会到“Compact”的意义所在!其他的也大同小异,比如“string”的解码器