黑马程序员技术交流社区

标题: byte数组与String转换时出现的奇怪现象 [打印本页]

作者: Mr.Hao    时间: 2014-7-8 01:25
标题: byte数组与String转换时出现的奇怪现象
下面的代码是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
为什么会这样


作者: 001可望成功    时间: 2014-7-8 10:01
API中说的很详细:
public String(byte[] bytes)
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。
你这里将buf = new String(data);,只要传送的数据没有超出字节数组的长度,这样buf.length()始终是一个定值了,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2