最近在做项目改造,涉及到自定义socket通讯协议。
协议通常是这样的:
报文分为报文头和报文体。报文头为固定长度,比如6个字节,这6个字节是后面报文体的长度。netty在解码是需要根据报文头的长度信息,确定报文是否全部接收完成。
一开始测试的时候,报文体长度使用的是String的length()方法获取。结果偶尔会出现服务端解码失败。
分析问题是报文中有中文字符。而中文字符一般需要2个或以上字节(根据编码不同,数量不同)。但是String的length()中只占一个位置。
所以需要使用String的getBytes().length获取报文体的byte数据长度。
String的length()和getBytes().length
原文:https://www.cnblogs.com/jimmyfan/p/13274978.html