2014-06-07 127 views
5

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,字符大小是16位,即2字节。不知何故,我回想起它的8位即1个字节。为了澄清我的疑问,我创建了一个带有单个字符“a” 的文本文件并将其保存。然后我检查了文件的大小,它的1个字节,即8位。我很困惑 字符的大小是什么?如果它的2个字节,为什么文件大小是1个字节,如果是1个字节,为什么链接说2个字节?字节大小8位或16位?

+0

1个字符是8位,是一个字节 –

+8

@AliGajani:这简直是不真实的。 –

+2

@AliGajani:再次查看语言标记,然后考虑如何在Java中对字符进行编码。即使如此,8位不一定是一个字节。 –

回答

23

Java中的charUTF-16代码单元。它不一定是一个完整的Unicode字符,但它实际上是一个无符号的16位整数。

当您将文本写入文件(或以某种其他方式将其转换为字节序列)时,则数据将取决于您使用的编码。例如,如果您使用ASCII或ISO-8859-1,那么您可以编写哪些字符的限制非常有限,但每个字符只能是一个字节。如果您使用UTF-16,则每个Java char将转换为恰好两个字节 - 但某些Unicode字符可能需要四个字节(由两个Java char值表示)。

如果您使用UTF-8,则编码形式中的单个Java char的长度将取决于该值。

0

请注意,文本文件确实具有与其关联的格式/字符集。文本文件通常以UTF-8格式保存,每个字符8位,除非字符是“特殊的”。

+0

你对“特殊”的定义是什么? *任何*非ASCII码? –

+0

我试图保持我的答案简洁:-)完整的定义请参阅[Wikipedia](http://en.wikipedia.org/wiki/UTF-8) – vogomatix

+4

当“简洁”意味着使用这样一个模糊的术语作为“特殊性”,我认为它不太有用。 –

0

Java中的char大小为2个字节(正如有效值范围所示)。但它并不一定意味着每个字符的表示都是2个字节长。例如,许多编码只会为每个字符保留1个字节(或者对于最常见的字符使用1个字节)。如果平台默认编码是1字节编码(如ISO-8859-1)或可变长度编码(例如作为UTF-8,它可以轻松地将该1字节转换为单个字符。