黑马程序员技术交流社区
标题:
为什么接收到的不是一堆0呢??
[打印本页]
作者:
NewDemo
时间:
2014-4-17 16:23
标题:
为什么接收到的不是一堆0呢??
本帖最后由 NewDemo 于 2014-4-17 18:02 编辑
在做UDP接收端的时候,为什么最后一句话没有打印出来很多0呢?难道这个getData()方法对字节数组的内容进行了有效判断吗?
以下是代码
import java.net.*;
class Test3
{
public static void main(String[] args) throws Exception
{
method_0();
}
//接收端 1.创建socket服务 2.定义数组,包,存储接收到的数据 3.使用dp中的方法 4.关闭资源
public static void method_0()throws Exception{
DatagramSocket ds = new DatagramSocket(10009);
while(true){
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
ds.receive(dp);
for(byte b:buf){
System.out.print(b);//此时打印的将是很多0。
}
System.out.println(new String(dp.getData(),0,dp.getLength()));
}
}
}
复制代码
无标题.png
(86.68 KB, 下载次数: 56)
下载附件
2014-4-17 16:17 上传
作者:
⒈心只霸占沵
时间:
2014-4-17 16:53
1,因为你的byte[] buf=new byte[1024];表示的是字节数组,长度为1024,也就是能存1024个字节
因为你发过来的数据没有到1024个字节,接入你发过来的数据有100个字节,buf这个字节数组只用到了从索引0开始到99,从100往后的索引都没有用到,因为byte[] 是引用类型,所以会有默认值,而默认值都是0,所以你遍历的时候会有很多0,那是没用到的索引位置上的0
2,System.out.println(new String(dp.getData(),0,dp.getLength()));
这个dp.getLength()肯定是返回了最后一个有效的索引即100的位置,所以new的时候会将0-100转为String
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2