读取字节数组直到NUL字符

时间:2013-01-26 01:36:06

标签: java arrays string

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

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

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

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

Stringsplit方法,可根据正则表达式的显示位置将其分解为字符串数组。你可以做到

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

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

答案 2 :(得分:0)

不要从整个事情中创建String。扫描字节数组为零,然后调用

new String(byteArray, 0, correctLength, "encoding")

答案 3 :(得分:0)

我最近必须解决这个问题,这是我的解决方案:

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");
}