A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NewDemo 中级黑马   /  2014-4-17 16:23  /  881 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 NewDemo 于 2014-4-17 18:02 编辑

在做UDP接收端的时候,为什么最后一句话没有打印出来很多0呢?难道这个getData()方法对字节数组的内容进行了有效判断吗?以下是代码
  1. import java.net.*;

  2. class Test3
  3. {
  4.         public static void main(String[] args) throws Exception
  5.         {
  6.                 method_0();
  7.         }
  8.         //接收端 1.创建socket服务 2.定义数组,包,存储接收到的数据 3.使用dp中的方法 4.关闭资源
  9.         public static void method_0()throws Exception{
  10.                 DatagramSocket ds = new DatagramSocket(10009);
  11.                 while(true){
  12.                         byte[] buf = new byte[1024];
  13.                         DatagramPacket dp = new DatagramPacket(buf,buf.length);
  14.                         ds.receive(dp);
  15.                         for(byte b:buf){
  16.                                 System.out.print(b);//此时打印的将是很多0。
  17.                         }
  18.                         System.out.println(new String(dp.getData(),0,dp.getLength()));
  19.                 }
  20.         }
  21. }
复制代码





评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

2 个回复

倒序浏览
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

点评

嗯嗯,知道是怎么回事儿了,得去恶补下基本数据类型和引用数据类型。。  发表于 2014-4-17 17:32

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马