2012-01-12 11 views
24

Come si crea un oggetto String da un array di byteCome si converte un array di byte con carattere di terminazione null in una stringa in Java?

byte arr[MAX_SIZE]; // Java 

cui uno degli elementi di matrice è una terminazione byte C nullo? E 'semplice come chiamare

String str = new String(arr); 

Sarà il costruttore String sapere di fermarsi automaticamente al carattere di terminazione nulla? Qualsiasi byte dopo il byte null sono (possibilmente) caratteri garbage che non voglio includere nella stringa. L'ultima risposta sotto Parsing byte array containg fields of unknown length suggerisce di eseguire il ciclo attraverso la matrice e di trovare manualmente il carattere di terminazione null, ma mi chiedevo se il costruttore String lo farà automaticamente. Presumo anche che il set di caratteri predefinito del sistema verrà utilizzato su tutte le estremità.

risposta

21
byte arr[] = ... 
Charset charset = ... 
int i; 
for (i = 0; i < arr.length && arr[i] != 0; i++) { } 
String str = new String(arr, 0, i, charSet); 

Note:

  • E 'generalmente una buona idea di utilizzare un parametro esplicito CharSet in modo che la vostra applicazione non dipende dalla piattaforma caratteri/codifica predefiniti.

  • Questo non funzionerà per alcuni set di caratteri. Ad esempio, una stringa codificata UTF-16 non può essere rappresentata in modo sicuro come una sequenza di byte a terminazione zero poiché molte unità di codice contengono zero byte. (D'altra parte, UTF-8 è OK a condizione che la stringa non contiene istanze di punto zero del codice; vedere Can UTF-8 contain zero byte?)

... ma mi chiedevo se il costruttore String farà automaticamente .

No, non lo faranno. (Non "chiedo" ... leggi javadoc :-))

Suppongo anche che il set di caratteri predefinito del sistema venga utilizzato su tutte le estremità.

Se non si specifica un set di caratteri, verrà utilizzato il valore predefinito della piattaforma Java. Questo è probabilmente il sistema predefinito, ma non è garantito.

4

Non si fermerà magicamente al terminatore nullo. Il carattere null non termina le stringhe in Java. Dovrai trovare l'indice del primo carattere null e fermarti qui. Utilizzare il costruttore String(byte[] arr, int offset, length) dopo.

+1

Il char NULL non è necessariamente verso la fine della matrice; può essere in qualsiasi posizione. – Phillip

+0

@BenS no, arr.length - 1 – sjr

+0

@Phillip, ho capito questo dopo aver letto di nuovo la tua domanda .. ha modificato la mia risposta – sjr

8

come su questo:

String str = new String(arr).split("\0")[0]; 
+4

Non sembra troppo buona se l'array di input è enorme, a meno che tu non abbia intenzione di leggere tutte le stringhe in ogni caso . – sjr

9

provare questo: String s = new String (arr) .trim()

+0

Questo non funziona – picoworm

+0

trim() rimuove il carattere null alla fine delle mie stringhe semplicemente ... –

+0

trim() risolve anche il mio problema. –

Problemi correlati