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à?