大家先看一下这段代码:
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[]的匿名对象,因而会占用额外的内存空间。不知道大家怎么看?
求指点。

解决方案 »

  1.   

    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);这个构造方法的源码就知道了。