黑马程序员技术交流社区
标题: byte数组与String转换时出现的奇怪现象 [打印本页]
作者: Mr.Hao 时间: 2014-7-8 01:25
标题: byte数组与String转换时出现的奇怪现象
下面的代码是UDP接收数据的一部分
- class UDPReceive implements Runnable{
- public DatagramSocket ds = null;
- public void run(){
- try {
- ds = new DatagramSocket(10002);
- } catch (SocketException e) {
- System.out.println("绑定端口失败");
- }
- String buf = null;
- while(true){
- try {
- byte[] data = new byte[1024];
- DatagramPacket dp = new DatagramPacket(data, data.length);
- ds.receive(dp);
- buf = new String(data);
- System.out.println(buf+" : "+buf.length()); //奇怪的是这里
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- }
- }
- }
复制代码 假如发送端发的数据是:这是个很奇怪的数据
这段数据字符串长度为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 |