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