/ / Czy java char big endian w pamięci JVM? - java, jvm, endianness

Czy java char big endian w pamięci JVM? - java, jvm, endianness

Czy java char big endian w pamięci JVM [stos / sterty]? Czy to jest UTF-16 LE czy UTF-16 BE?

Myślę, że tak naprawdę nie powinno to mieć tak dużego znaczenia, zależy to od implementacji JVM i zachowuje natywną kolejność układów z doskonałych powodów. To LE dla inteligencji itp. Czy to prawda?

Czy jest to określone w specyfikacji Java. samo?

Odpowiedzi:

2 dla odpowiedzi № 1

Język Java jest agnostyczny. (Implementacja JVM prawdopodobnie używa endianizmu sprzętowego).

Różne sposoby konwertowania znaków na sekwencję bajtów mają jednak ustalone endianności, np. DataOutputStream.


5 dla odpowiedzi nr 2

Format pliku klasy określa, że ​​wszystkie elementy muszą być zapisywane w formacie big-endian. http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html

Nie sprawdziłem, ale podejrzewam, że specyfikacja JNI mówi również o endianizacji i podejrzewam, że jest to big-endian.


0 dla odpowiedzi № 3

Nie jest określony przez specyfikację maszyny wirtualnej i od maszyny wirtualnej zależy, jak sobie z tym poradzić.

A ponieważ nie ma bezpośredniego sposobu ponownej interpretacji char jako dwa byte wartości, których nie można nawet zobaczyć w wyniku decyzji programu Java (każda aplikacja Java będzie działać dokładnie tak samo na zgodnej maszynie wirtualnej, niezależnie od endianowości maszyny wirtualnej).


0 dla odpowiedzi nr 4

Pojedynczy znak jest albo little-endian, albo big-endian oparty na sprzęcie twojego procesora. Większość procesorów Intel / AMD / ARM używa little-endian, a Sparc / Alpha używa big-endian.

Kodowanie UTF-16 to sposób, w jaki Java przechowuje punkty kodowe (znaki do 0x1FFFF) w ciągach. Kodowanie UTF-16LE odnosi się do tego, jak taki ciąg można zapisać do pliku.