java - 字节数组中 char 的大小

标签 java string casting bytearray

作为java doc声明:

char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).

但是当我有一个字符串(仅包含 ASCII 符号)并将其转换为字节数组时,字符串的每个符号都存储在一个字节中,这比 Java 文档所述的 16 位要少。它是如何工作的?我可以想象 java 编译器/解释器对每个字符仅使用一个字节来表示性能问题的 ASCII 符号。

此外,如果我得到一个只有 ASCII 符号和一个 UTF-16 符号的字符串并将其转换为字节数组,会发生什么情况。现在字符串的每个符号都使用 2 个字节?

最佳答案

使用 character encoding 将字符转换为字节,反之亦然。 .

字符编码决定了字符如何用字节表示。例如,ASCII是一种字符编码,每个字符使用 7 位。显然,它只能表示 128 个字符,远远少于 Java 中存在的 65,536 个字符。

其他字符编码是UTF-8和UTF-16。事实上,Java char 实际上是一个 UTF-16 字符 - 如果您直接将它转换为 int,您将获得该字符的 UTF-16 代码。

这是一个较长的字符编码教程:What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text .

如果您在String 上调用getBytes(),它将使用系统的默认字符编码将字符串中的字符转换为字节。最好使用将字符集名称作为参数的 getBytes() 版本,这样您就知道使用了什么字符集。例如:

byte[] bytes = str.getBytes("UTF-8");

关于java - 字节数组中 char 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124310/

相关文章:

java - 哪个 Java 集合允许廉价追加?

java - 调用 java.util.zip.ZipFile.getInputStream() 时出现 GroovyCastException

java - 转换为在运行时确定的类

java - 为什么强制转换决定调用哪个重载方法?

java - 无法摆脱绘制的线条

c++ - 高效过滤一串文本中的单词

r - 在R中提取直到双下划线的子字符串

c# - C# 中指定的强制转换无效错误

java - 等到任何 Future<T> 完成

JavaScript 搜索字符串错误