如何在Java中将具有空终止符的字节数组转换为字符串?

如何从字节数组创建String对象

byte arr[MAX_SIZE];  // Java

其中数组元素之一是C空终止字节?像打电话一样简单吗

String str = new String( arr );

String构造函数是否知道会自动在null终止符处停止?空字节之后的任何字节都是(可能是)我不想包含在字符串中的垃圾字符。在解析字节数组包含未知长度的字段下的最后一个响应建议循环遍历数组并手动查找空终止符,但是我想知道String构造函数是否会自动执行此操作。我还假定系统的默认字符集将在所有末端使用。

回答:

byte arr[] = ...

Charset charset = ...

int i;

for (i = 0; i < arr.length && arr[i] != 0; i++) { }

String str = new String(arr, 0, i, charSet);

笔记:

  • 通常,最好使用显式的CharSet参数,以使您的应用程序不依赖于平台的默认字符集/编码。

  • 这不适用于某些字符集。例如,UTF-16编码的字符串不能安全地表示为零结尾的字节序列,因为许多代码单元包含零字节。(另一方面,如果字符串不包含代码点零的实例,则[UTF-8可以](http://codingdict.com/questions/111277;请参阅UTF-8可以包含零字节吗?

…但是我想知道String构造函数是否会自动执行此操作。

不,他们不会。(不要“奇怪” …阅读javadoc :-))

我还假定系统的默认字符集将在所有末端使用。

如果未指定字符集,则将使用Java平台的默认字符集。这可能是 系统 默认值,但不能保证。

以上是 如何在Java中将具有空终止符的字节数组转换为字符串? 的全部内容, 来源链接: utcz.com/qa/415595.html

回到顶部