java - 字节数组中字符的大小

标签 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 符号的字符串并将其转换为字节数组,会发生什么情况。 String 的每个符号现在都使用 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 - 字节数组中字符的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124310/

相关文章:

java - 日历滚动影响其他日历

c - 在不抑制警告的情况下告诉编译器对齐没问题的可移植方法?

C# 强制转换整个数组?

string - 如何在XSLT中将字符串格式化为Pascal大小写?

c++ - 检查字符串是否以另一个已知字符串开头?

c - 在 printf 中使用 %c 和循环与 %s 的结果不同,并带有空终止字符串

c++ - 从void *到long的正确转换是什么?

java - 从头节点反向链表?

java - 相同的方法调用,LinkedList、Queue 与 List 中的不同结果

java - 动态加载数据到 HashMap