滨海之君 2021-02-21 18:36 采纳率: 60%
浏览 35
已采纳

socket通信接收的数据问题

socket通信接收的数据后转String类型后为什么前面会带半个双引号??  在控制塔打印是没有那半个双引号的,equqls判断为false

  • 写回答

1条回答 默认 最新

  • 梵净游云 2021-02-22 11:59
    关注

    断点观察字符串只有半个引号通常是因为字符串太长了,后面的省略掉了。你那个数据一共有1000多个字节明显不对,如果utf-8编码,字符串“bye” 应该只有3个字节。你那个"bye".equals(receiveData) 结果为false 就是应为字符串不一样长。控制台打印出来看到是"bye",那是因为你那个字节数据后面都是0,解析出来是空白字符。

    要重现你的问题很容易,你可以试试这样:

    byte[] rawBytes = "bye".getBytes("UTF-8");
    byte[] receiveData = Arrays.copyOf(rawBytes, rawBytes.length + 1021);
    
    String str = new String(receiveData, 0, receiveData.length);
    System.err.println(str.length());
    System.err.println(str);
    System.err.println("bye".equals(str));
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?