黑马程序员技术交流社区
标题:
毕老视频中一个小小疑问
[打印本页]
作者:
龚振 龚振 龚振
时间:
2012-4-5 00:29
标题:
毕老视频中一个小小疑问
在day23中UdpDemo2里面的小问题,如下,
太长省略了发送端的代码,byte[] buf = new byte[1024]语句放入循环外面有什么区别吗?
我自己试了下好像是没有区别的,不知是否?
还想问一下贴代码怎么带格式的呀,就是颜色也同时贴上来的?求帮助~
class UdpRece2
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket(10001);
while(true)
{
byte[] buf = new byte[1024]; //语句放入循环外面有什么区别吗?
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::"+data);
}
}
}
作者:
曾晓文
时间:
2012-4-5 00:49
语句放入循环里面:每次while循环,会new一个byte[]对象。语句放入循环外面:只new一个byte[]对象。但每次循环之后要记得清空数组中的数据,以免影响下一次循环的读写。
作者:
陈苓
时间:
2012-4-5 02:22
while(true) //这里的while(true)
值为true就是表示一直在等待接收数据
{
byte[] buf = new byte[1024]; //语句放入循环外面有什么区别吗?//放在里面每次接收到的数据都会创建一个缓冲区,有利于多线程同步,放在外面就会有局限性了,当我要同时接收多条数据的时候,每条数据的内容都是不一样的,一个缓冲区能同时装不同类型的数据吗?那是不可能的,多以必须定义里面,一面以后对功能的扩展
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"::"+data);
}
}
}
作者:
李成
时间:
2012-4-5 03:12
while(true){
byte[] buf = new byte[1024];
}
每次接收到数据的时候他都会新键一个buf。
DatagramPacket dp = new DatagramPack(buf,buf.length);
buf.length是接收到数据的长度。
如果buf放到外面,假如第一次接收到的数据长度大于第二接收数据长度的话buf.length就指的是第一次的数据的长度,buf中多出第二次接收到的数据长度以上的数据是第一次接收到的数据,那么获取数据的时候就出现错误。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2