关于缓冲区的一个BUG

来源:互联网 发布:算法导论好还是算法好 编辑:程序博客网 时间:2024/05/10 17:08

今天写了一个Demo

一个手机客户端每次循环12次,每次往服务器发送一个UDP数据包,每个UDP数据包中装的数据是一句话hello加上循环的次数

服务器每次接收到数据包后进行输出,输出方式大致如下

buf.clear();System.out.println(buf.limit());keyChannel.receive(buf);buf.flip();System.out.println(new String(buf.array(), "UTF-8"));

发现每次客户端第一次运行的时候都OK

但是当客户端第二次运行时后面总会多出一些莫名其妙的字符出来

最后发现是自己想当然的把new String(ByteBuffer);这个东西给理解错了

一开始以为他会根据buf.limit()的大小去生成一个字符串,现在发现这个东西跟buf.limit()一点关系都没有,所以他会把缓冲区里的所有东西都放进去初始化String

导致最后多出来的莫名其妙的东西,其实是上次缓冲中的数据留下来的遗迹



原创粉丝点击