Sto scrivendo del codice per gestire un flusso di dati binari. Viene ricevuto in blocchi rappresentati da array di byte. Combinati, gli array di byte rappresentano un flusso sequenziale di messaggi, ognuno dei quali termina con lo stesso valore di terminatore costante (0xff nel mio caso). Tuttavia, il valore del terminatore può apparire in qualsiasi punto in qualsiasi dato blocco di dati. Un singolo blocco può contenere parte di un messaggio, più messaggi e qualsiasi cosa nel mezzo.Tokenizzazione di dati binari in java
Ecco un piccolo assaggio di ciò che i dati trattati da questo potrebbe essere simile:
[0x00, 0x0a, 0xff, 0x01]
[0x01, 0x01]
[0xff, 0x01, 0xff]
Questi dati devono essere convertiti in questi messaggi:
[0x00, 0x0a, 0xff]
[0x01, 0x01, 0x01, 0xff]
[0x01, 0xff]
ho scritto una piccola classe per gestire Questo. Ha un metodo per aggiungere alcuni dati nel formato array di byte, che viene quindi inserito in un array di buffer. Quando viene rilevato il carattere di terminatore, l'array di byte viene cancellato e il messaggio completo viene inserito in una coda di messaggi, a cui è possibile accedere utilizzando i metodi hasNext() e next() (simile a un iteratore).
Questa soluzione funziona bene, ma come ho finito, ho capito che potrebbe esistere già un codice stabile, performante e testato in una libreria stabilita che potrei utilizzare al suo posto.
Quindi la mia domanda è: sai di una libreria di utilità che avrebbe una tale classe, o forse c'è qualcosa nella libreria Java 6 standard che può farlo già?
matrice Byte ricerca e la manipolazione è qualcosa che a volte mi manca in Java. Si può usare una classe figlia di flusso di byte bufferizzata che può eseguire un test per byte per '0xff'. In alcuni casi è possibile utilizzare una pipeline: vedere [PipedInputStream] (http://docs.oracle.com/javase/6/docs/api/java/io/PipedInputStream.html) ecc. –