0

我正在通过 Java 中的 UDP 接收带有字节数组的数据包。我知道最大可能的字节大小,但我不知道当前收到的大小。

如果我从这个字节数组创建一个 String 实例,那么在有用的有效负载之后,该字符串将有很多 NUL 字符 (\u0000)。

当第一个 NUL 出现时,如何将此字节数组转换为字符串?(我不希望在我的有效载荷中有 NUL)。

4

4 回答 4

1

您可以使用 StringTokenizer 获取字符串的第一部分,直到看到第一个 NULL。类似于:result = (new stringTokenizer(packet, null)).nextToken()

于 2013-01-26T01:45:32.190 回答
1

String有一种split方法可以根据正则表达式出现的位置将其分解为字符串数组。你可以做

    s = s.split("\u0000")[0];

将字符串拆分为 NUL 字符并获取第一部分。

于 2013-01-26T01:49:23.323 回答
1

不要String从整个事物中创造出来。扫描字节数组的零,然后调用

new String(byteArray, 0, correctLength, "encoding")
于 2013-01-26T02:04:02.147 回答
1

我最近不得不解决这个问题,这是我的解决方案:

public String getString(byte[] sb) {
    // trim nulls from end
    int strLen = sb.length;
    for (; strLen > 0; strLen--)
        if (sb[strLen - 1] != '\u0000')
            break;

    return new String(sb, 0, strLen, "UTF8");
}
于 2018-06-05T13:26:15.280 回答