Java 读取字节数组,最多可读取NUL字符

Java 读取字节数组,最多可读取NUL字符,java,arrays,string,Java,Arrays,String,我在Java中通过UDP接收一个带有字节数组的数据包。 我知道可能的最大字节大小,但我不知道当前接收的大小 如果我从这个字节数组创建一个字符串实例,那么该字符串在有用的负载之后将有很多NUL字符(\u0000) 当第一个NUL出现时,如何将该字节数组转换为字符串? (我不希望有效负载中有NUL)。您可以使用StringTokenizer获取字符串的第一部分,直到看到第一个NULL。 类似于:result=(new stringTokenizer(packet,null)).nextToken()

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

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

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

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

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

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

    s = s.split("\u0000")[0];
将字符串拆分为NUL字符,并取第一部分。

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

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

将字符串拆分为NUL字符,然后取第一部分。

不要从整个字符串中创建
字符串。扫描字节数组中的零,然后调用

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

不要从整件事中创建
字符串。扫描字节数组中的零,然后调用

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

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

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

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

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

我能以某种方式避免迭代吗?或者它不会消耗太多资源..?查找零字节的循环所花费的时间比您将要执行的任何其他操作都要少。我是否可以以某种方式避免迭代?或者它不会消耗太多资源..?查找零字节的循环所花费的时间比您将要执行的任何其他操作都要少。但我并不真的想将我的资源用于实例化95%无用的字符串。但我真的不想将我的资源用于实例化95%无用的字符串。