2014-06-07 15 views
5

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html, rozmiar czcionki to 16 bitów, to znaczy 2 bajty. jakoś przypomniałem jego 8-bitowy, tj. 1 bajt. Aby usunąć wątpliwości, utworzyłem plik tekstowy z pojedynczym znakiem "a" i zapisałem go. Następnie sprawdziłem rozmiar pliku, jego 1 bajt, czyli 8 bitów. Jestem zdezorientowany co do wielkości postaci ? Jeśli jego 2 bajty, dlaczego rozmiar pliku wynosi 1 bajt, a jeśli jest to 1 bajt, dlaczego link mówi 2 bajty?Rozmiar woluminu 8 bitów lub 16 bitów?

+0

1 znak to 8 bitów, czyli bajt –

+8

@AliGajani: To po prostu nieprawda. –

+2

@AliGajani: Ponownie spójrz na etykietę języka, a następnie rozważ, w jaki sposób znaki są kodowane w Javie. Mimo to 8-bitów niekoniecznie jest bajtem. –

Odpowiedz

23

A char w języku Java to jednostka kodu UTF-16. Nie musi to być kompletna postać w Unicode, ale w rzeczywistości jest to 16-bitowa liczba całkowita bez znaku.

Podczas wpisywania tekstu do pliku (lub w inny sposób przekształcenia go w sekwencję bajtów), dane będą zależały od tego, który kod jest używany. Na przykład, jeśli używasz ASCII lub ISO-8859-1, jesteś bardzo ograniczony co do tego, które postacie możesz pisać, ale każda postać będzie tylko bajtem. Jeśli używasz UTF-16, to każda Java char zostanie przekonwertowana na dokładnie dwa bajty - ale niektóre znaki Unicode mogą zająć cztery bajty (te reprezentowane przez dwie wartości Java char).

Jeśli używasz UTF-8, to długość nawet pojedynczej Java char w zakodowanej formie będzie zależeć od wartości.

0

Należy pamiętać, że pliki tekstowe naprawdę mają powiązany z nimi format/zestaw znaków. Pliki tekstowe są zwykle zapisywane w formacie UTF-8, który wynosi 8 bitów na znak, chyba że znak jest "specjalny".

+0

Jaka jest twoja definicja "specjalnego"? * Wszystko * poza ASCII? –

+0

Starałem się, aby moja odpowiedź była zwięzła :-) dla pełnej definicji patrz [Wikipedia] (http://en.wikipedia.org/wiki/UTF-8) – vogomatix

+4

Kiedy "zwięzłe" oznacza użycie tak okropnie niejasnego terminu jak "wyjątkowy charakter", nie sądzę, że to bardzo przydatne. –

0

Znak w Javie ma 2 bajty (co sugeruje prawidłowy zakres wartości). Ale niekoniecznie oznacza to, że każda reprezentacja postaci ma długość 2 bajtów. Na przykład, wiele kodowań zarezerwuje tylko 1 bajt dla każdego znaku (lub użyje 1 bajtu dla najczęstszych znaków) .Jeśli domyślne kodowanie platformy to kodowanie 1-bajtowe, takie jak ISO-8859-1 lub kodowanie o zmiennej długości, takie jak jako UTF-8 może z łatwością przekonwertować 1 bajt na pojedynczy znak.

Powiązane problemy