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 № 1Ję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.