Ricevo da presa una stringa in un array di byte che assomigliano:Come rilevare la fine della stringa nella serie di byte nella conversione di stringhe?
[128,5,6,3,45,0,0,0,0,0]
La dimensione proposta dal protocollo di rete è la lunghezza totale della stringa (compresi zeri) così, nel mio exemple 10.
Se io semplicemente:
String myString = new String(myBuffer);
ho alla fine della stringa 5 non corretto caracter. La conversione non sembra rilevare la fine del carattere di stringa (0).
Per ottenere la dimensione corretta e la stringa corretta faccio questo:
int sizeLabelTmp = 0;
//Iterate over the 10 bit to get the real size of the string
for(int j = 0; j<(sizeLabel); j++) {
byte charac = datasRec[j];
if(charac == 0)
break;
sizeLabelTmp ++;
}
// Create a temp byte array to make a correct conversion
byte[] label = new byte[sizeLabelTmp];
for(int j = 0; j<(sizeLabelTmp); j++) {
label[j] = datasRec[j];
}
String myString = new String(label);
C'è un modo migliore per gestire il problema?
Grazie
+1 per prendere in considerazione la codifica. Se la roba ricevuta tramite socket è solo una stringa Java serializzata, dovrebbe essere ok. –
@G_H: "Solo una stringa Java serializzata" non specifica realmente il formato di serializzazione. Se l'OP usasse la serializzazione binaria Java, non avrebbe comunque eseguito questa operazione in modo esplicito ... e se si tratta di un altro formato di serializzazione, dovremmo sapere * quale *. –
Probabilmente dovrei smettere di parlare ... Il fatto è che sono sempre stato lontano dalla serializzazione e non conosco bene i dettagli. Solitamente JAXB o JPA sono l'unica cosa che considero un'opzione. –