我正在通过 Java 中的 UDP 接收带有字节数组的数据包。我知道最大可能的字节大小,但我不知道当前收到的大小。
如果我从这个字节数组创建一个 String 实例,那么在有用的有效负载之后,该字符串将有很多 NUL 字符 (\u0000)。
当第一个 NUL 出现时,如何将此字节数组转换为字符串?(我不希望在我的有效载荷中有 NUL)。
您可以使用 StringTokenizer 获取字符串的第一部分,直到看到第一个 NULL。类似于:result = (new stringTokenizer(packet, null)).nextToken()
不要String
从整个事物中创造出来。扫描字节数组的零,然后调用
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");
}