当前位置: 代码迷 >> J2SE >> 希望大家讨论一上,关于UDP的DatagramPacket的相关有关问题
  详细解决方案

希望大家讨论一上,关于UDP的DatagramPacket的相关有关问题

热度:85   发布时间:2016-04-24 00:21:55.0
希望大家讨论一下,关于UDP的DatagramPacket的相关问题
大家先看一下这段代码:
Java code
            DatagramSocket ds = new DatagramSocket(8888);            while (true) {                byte[] buf = new byte[50];                 DatagramPacket dp = new DatagramPacket(buf, buf.length);                ds.receive(dp);                                                        System.out.println(new String(dp.getData());                                                        System.out.println(new String(buf,buf.length());                                          }

最后两句话可以显示出同样的效果,但是那句话更好一些呢?
个人愚见:后面一句System.out.println(new String(buf,buf.length());更好一些,因为他是直接调用原有的buf,不会消耗额外的内存,而dp.getData()虽然返回的也是数据缓冲区,但我感觉这步操作好像会在内存中new出一个byte[]的匿名对象,因而会占用额外的内存空间。不知道大家怎么看?
求指点。

------解决方案--------------------
System.out.println(new String(dp.getData());
System.out.println(new String(buf,buf.length());

这个两句效果是一样的。

“因为他是直接调用原有的buf,不会消耗额外的内存,而dp.getData()虽然返回的也是数据缓冲区,但我感觉这步操作好像会在内存中new出一个byte[]的匿名对象,因而会占用额外的内存空间”
dp.getData()返回的byte数组其实就是你自己创建的那个byte数组,所以你调用这个方法并没有占用额外 的内存空间。
你看一下new DatagramPacket(buf, buf.length);这个构造方法的源码就知道了。