LineBasedFrameDecoder解决TCP粘包问题

LineBasedFrameDecoder解决TCP粘包问题

Tags: Netty

摘要

换行符解码

原理分析

LineBasedFrameDecoder

LineBasedFrameDecoder的工作原理就是它依次遍历ByteBuf中的可读字节,判断看是否有\n或者\r\n,如果有,就依次位置为结束位置,从可读索引到结束位置取件的字节就组成了一行。它是以换行符为结束标志的解码器,支持携带结束符或者不携带结束符两种解码方式,同时支持配置单行的最大长度。
如果连续读取到的最大长度后仍然没有发现换行符,就会抛出异常,同时忽略之前读到的异常码流。

StringDecoder

StringDecoder的功能非常简单,就是将接收到的对象转换成字符串,然后继续调用后面的hanlder。

LineBasedFrameDecoder和StringDecoder的组合就是按行切换的文本解码器。

源码地址

https://coding.net/u/javacore/p/netty_combinepkg_unpkg/git