Sto scrivendo un InputStream
che elabora i flussi di dati contenenti dati "trailer". Cioè, il finale n byte dello stream è un pezzo di dati che deve essere gestito separatamente e non deve essere restituito dai metodi read
.
La mia classe manterrà un array di byte interno di lunghezza n e leggerà i dati in questo array di byte dal flusso sottostante. I dati verranno quindi estratti dalla parte anteriore del buffer per soddisfare le richieste in read
.
L'implementazione del metodo int read()
è abbastanza semplice: chiamo solo lo stesso metodo sul flusso sottostante, sposto il mio array di byte di 1 e sposto il risultato al chiamante.
L'implementazione di int read(byte[] b)
è più impegnativa in quanto richiede lo spostamento di un numero elevato di byte attraverso il mio buffer n , mentre scoppiettando e confrontando i byte dal lato anteriore. Essenzialmente un buffer "sliding window", contenente sempre gli ultimi n byte dal mio stream sottostante.
Ho la sensazione di re-inventare la ruota se inizio a codificarla da zero. Qualcuno può suggerire di ignorare un'implementazione InputStream
o Queue
che sarebbe adatta a questa attività?