Non è la dimensione del carattere in Java 2 byte?


Answers

Java memorizza internamente tutti i suoi "caratteri" come due byte. Tuttavia, quando diventano stringhe, il numero di byte dipende dalla codifica.

Alcuni caratteri (ASCII) sono byte singoli, ma molti altri sono multi-byte.

Java supporta Unicode, quindi in base a:

Java Character Docs

Il valore massimo supportato è "\ uFFFF" (esadecimale FFFF, dec 65535) o 11111111 binario 11111111 (due byte).

Question

Ho usato RandomAccessFile per leggere un byte da un file di testo.

public static void readFile(RandomAccessFile fr) {
    byte[] cbuff = new byte[1];
    fr.read(cbuff,0,1);
    System.out.println(new String(cbuff));
}

Perché sto leggendo un personaggio completo letto da questo?




Ci sono alcune grandi risposte qui, ma volevo sottolineare che jvm è libero di memorizzare un valore di char in qualsiasi spazio di dimensione> = 2 byte.

Su molte architetture è prevista una penalità per l'esecuzione dell'accesso alla memoria non allineato in modo che un char possa essere facilmente riempito a 4 byte. Un carattere volatile potrebbe persino essere riempito fino alla dimensione della linea della cache della CPU per evitare false condivisioni. https://en.wikipedia.org/wiki/False_sharing

Potrebbe non essere intuitivo per i nuovi programmatori Java che un array di caratteri o una stringa NON siano semplicemente più caratteri. Dovresti imparare e pensare a stringhe e array distintamente da "personaggi multipli".

Voglio anche sottolineare che i personaggi java sono spesso utilizzati in modo improprio. Le persone non si rendono conto che stanno scrivendo un codice che non gestirà correttamente i codepoint di 16 bit di lunghezza.




Nel file di testo ASCII ogni carattere è solo un byte