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

© Mr.Hao 中级黑马   /  2014-7-8 01:25  /  1248 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面的代码是UDP接收数据的一部分
  1. class UDPReceive implements Runnable{
  2.         public DatagramSocket ds = null;
  3.         public void run(){
  4.                 try {
  5.                         ds = new DatagramSocket(10002);
  6.                 } catch (SocketException e) {
  7.                         System.out.println("绑定端口失败");
  8.                 }
  9.                 String buf = null;
  10.                 while(true){
  11.                         try {
  12.                                 byte[] data = new byte[1024];
  13.                                 DatagramPacket dp = new DatagramPacket(data, data.length);
  14.                                 ds.receive(dp);
  15.                                 buf = new String(data);
  16.                                 System.out.println(buf+" : "+buf.length());      //奇怪的是这里
  17.                         } catch (Exception e1) {
  18.                                 e1.printStackTrace();
  19.                         }
  20.                 }
  21.         }
  22. }
复制代码
假如发送端发的数据是:这是个很奇怪的数据
这段数据字符串长度为9
打印的结果却是:
这是个很奇怪的数据 : 1015
数据是没有错,但是打印的长度却不是9,是定义的接收数据的byte数组长度减去9,为1015
为什么会这样

1 个回复

倒序浏览
API中说的很详细:
public String(byte[] bytes)
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。
你这里将buf = new String(data);,只要传送的数据没有超出字节数组的长度,这样buf.length()始终是一个定值了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马