recibo de la toma de una cadena en una matriz de bytes que se parecen:¿Cómo detectar el final de la cadena en la matriz de bytes para la conversión de cadenas?
[128,5,6,3,45,0,0,0,0,0]
El tamaño propuesta por el protocolo de red es la longitud total de la cadena (incluyendo ceros) por lo que, en mi exemple 10.
Si yo simplemente:
String myString = new String(myBuffer);
tengo al final de la cadena de caracter 5 no correcta. La conversión no parece detectar el final del caracter de cadena (0).
para obtener el tamaño correcto y la cadena correcta hago esto:
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);
¿Hay una mejor manera de manejar el problema?
Gracias
+1 para tomar la codificación en cuenta. Si las cosas recibidas sobre el socket son solo una serie Java serializada, debería estar bien. –
@ G_H: "Solo una cadena de Java serializada" realmente no especifica cuál es el formato de serialización. Si el OP utilizara la serialización binaria de Java, no estaría haciendo esta operación explícitamente de todos modos ... y si se trata de algún otro formato de serialización, necesitaríamos saber * qué *. –
Probablemente debería dejar de hablar ... El hecho es que siempre me he mantenido alejado de la serialización y no conozco muy bien los detalles. JAXB o JPA suele ser lo único que considero una opción. –