2014-06-07 3 views
5

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html, ist die Zeichengröße 16 Bit, d. H. 2 Byte. irgendwie erinnerte ich mich an seine 8 Bit, d. H. 1 Byte. Um meine Zweifel zu beseitigen, habe ich eine Textdatei mit dem Einzelzeichen "a" erstellt und gespeichert. Dann untersuchte ich die Größe der Datei, deren 1 Byte, d. H. 8 Bit. Ich bin verwirrt, was die Größe von Zeichen ist? Wenn es 2 Byte ist, warum ist die Dateigröße 1 Byte und wenn es 1 Byte ist, warum Link 2 Bytes sagt?Char Größe 8 Bit oder 16 Bit?

+0

1 Zeichen ist 8 Bits, die ein Byte –

+8

@AliGajani ist: Das einfach unwahr ist. –

+2

@AliGajani: Sehen Sie sich das Sprach-Tag erneut an und überlegen Sie dann, wie Zeichen in Java kodiert sind. Trotzdem ist 8-Bit nicht notwendigerweise ein Byte. –

Antwort

23

Ein char in Java ist eine UTF-16 Code-Einheit. Es ist nicht unbedingt ein vollständiges Unicode-Zeichen, aber es ist effektiv eine vorzeichenlose 16-Bit-Ganzzahl.

Wenn Sie Text in einer Datei (oder auf andere Weise wandeln es in eine Folge von Bytes) schreiben, dann werden die Daten davon abhängen, welche Codierung Sie verwenden. Wenn Sie beispielsweise ASCII oder ISO-8859-1 verwenden, sind Sie sehr eingeschränkt, welche Zeichen Sie schreiben können, aber jedes Zeichen ist nur ein Byte. Wenn Sie UTF-16 verwenden, wird jedes Java char in genau zwei Bytes konvertiert - aber einige Unicode-Zeichen können vier Bytes (die durch zwei Java char Werte dargestellt werden). Wenn Sie UTF-8 verwenden, hängt die Länge eines einzelnen Java char in der codierten Form von dem Wert ab.

0

Beachten Sie, dass Textdateien haben wirklich ein Format/Zeichensatz mit ihnen verbunden sind. Textdateien werden normalerweise im UTF-8-Format mit 8 Bit pro Zeichen gespeichert, es sei denn, das Zeichen ist "speziell".

+0

Was ist Ihre Definition von "Spezial"? * Alles * Nicht-ASCII? –

+0

Ich habe versucht, meine Antwort prägnant :-) für eine vollständige Definition zu halten siehe [Wikipedia] (http://en.wikipedia.org/wiki/UTF-8) – vogomatix

+4

Wenn „prägnant“ bedeutet solche mit einem scheußlich vagen Begriff wie "Sonderzeichen", ich glaube nicht, dass es viel nutzt. –

0

A char in Java ist 2 Byte groß ist (wie der gültige Wertebereich schlägt). Aber es bedeutet nicht notwendigerweise, dass jede Darstellung eines Charakters 2 Bytes lang ist. Zum Beispiel würden viele Codierungen nur 1 Byte für jedes Zeichen reservieren (oder 1 Byte für die häufigsten Zeichen verwenden). Wenn die Standardcodierung der Plattform eine 1-Byte-Codierung wie ISO-8859-1 oder eine Codierung mit variabler Länge ist, wie z als UTF-8 kann das 1 Byte einfach in ein einzelnes Zeichen umgewandelt werden.