Por ejemplo, digamos que desea eliminar de la matriz todos los segmentos continuos de 0 de más de 3 bytesJava: quitar segmento Continious de ceros del conjunto de bytes
byte a[] = {1,2,3,0,1,2,3,0,0,0,0,4};
byte r[] = magic(a);
System.out.println(r);
resultado
{1,2,3,0,1,2,3,4}
I desea hacer algo como una expresión regular en Java, pero en una matriz de bytes en lugar de una cadena.
¿Hay algo que pueda ayudarme a incorporar (o hay una buena herramienta de terceros), o tengo que trabajar desde cero?
Las cadenas son UTF-16, por lo que la conversión de ida y vuelta no es una buena idea. Al menos es un montón de desperdicio sobrecarga ... ¿verdad?
¿Qué tan importante es el rendimiento y uso de memoria para su caso de uso? En general, la RAM es barata y las CPU son rápidas. ¿Ha encontrado realmente un cuello de botella o se trata de preocuparse por la eficiencia? Puedes probarlo fácilmente convirtiendo byte [] en String usando una codificación de 8 bits, haz tu regexing y verifica el rendimiento. Después de todo, no nos preocupamos por cuán ineficientes son las cadenas de Java con sus caracteres de 16 bits para el uso normal en entornos ANSI, ¿no? –
Es para una aplicación de alto rendimiento, estoy más preocupado por los ciclos que por el uso de ram. – Mike
Todavía vale la evaluación comparativa; un Hotspot VM convertirá el código en zonas activas al código de máquina, que manejará los datos de 16 bits a la misma velocidad que los datos de 8 bits, ya que todo encaja en una palabra de máquina de 32 bits. Incluso si te parece demasiado lento, no habrás pasado mucho tiempo averiguándolo. –