今天写了一个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
导致最后多出来的莫名其妙的东西,其实是上次缓冲中的数据留下来的遗迹