如何从字节数组创建 String 对象
byte arr[MAX_SIZE]; // Java
其中数组元素之一是 C 空终止字节?是不是像打电话那么简单
String str = new String( arr );
String 构造函数是否知道自动停止在空终止字符处?空字节之后的任何字节(可能)都是我不想包含在字符串中的垃圾字符。最后的回复如下解析包含未知长度字段的字节数组 https://stackoverflow.com/questions/5106531/parsing-byte-array-in-java建议循环遍历数组并手动查找空终止字符,但我想知道 String 构造函数是否会自动执行此操作。我还假设系统的默认字符集将在所有端使用。
byte arr[] = ...
Charset charset = ...
// Find the position of the first zero byte
int i;
for (i = 0; i < arr.length && arr[i] != 0; i++) { }
String str = new String(arr, 0, i, charSet);
Notes:
-
使用显式 CharSet 参数通常是一个好主意,这样您的应用程序就不会依赖于平台的默认字符集/编码。
-
这对于某些字符集不起作用。例如,UTF-16 编码的字符串不能安全地表示为以零结尾的字节序列,因为许多代码单元包含零字节。 (另一方面,只要字符串不包含代码点零的实例,UTF-8 就可以;请参阅UTF-8 可以包含零字节吗? https://stackoverflow.com/questions/6907297/can-utf-8-contain-zero-byte)
...但我想知道 String 构造函数是否会自动执行此操作。
不,他们不会。 (不要“想知道”......阅读 javadoc :-))
我还假设系统的默认字符集将在所有端使用。
如果不指定字符集,将使用 Java 平台的默认字符集。这很可能是system默认,但不能保证这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)