Qual è il miglior buffer di byte circolare ridimensionabile disponibile in Java?
Domanda
Ho bisogno di una classe di buffer di byte in Java per l'utilizzo a thread singolo. Dovrei essere in grado di inserire dati nella parte posteriore del buffer e leggere i dati nella parte anteriore, con un costo ammortizzato di O (1). Il buffer dovrebbe ridimensionare quando è pieno, piuttosto che generare un'eccezione o qualcosa del genere.
Potrei scriverne uno da solo, ma sarei molto sorpreso se questo non esistesse ancora in un pacchetto Java standard e, in caso contrario, mi aspetto che esista in una biblioteca pubblica ben collaudata .
Cosa consiglieresti?
Soluzione
Non sono sicuro che sia " il migliore " ;, ma hai un bell'esempio di buffer circolare byte qui .
Quelle Java Utilities - OstermillerUtils sono in licenza GPL .
Questo buffer circolare di byte implementa il modello produttore / consumatore di buffer circolare per byte. Il riempimento e lo svuotamento del buffer viene eseguito con Java InputStreams e OutputStreams standard.
L'uso di questa classe è un'alternativa più semplice all'utilizzo di PipedInputStream e PipedOutputStream.
PipedInputStreams e PipedOutputStreams non supportano l'operazione mark, non consentono di controllare le dimensioni del buffer che usano e hanno un'API più complicata che richiede un'istanza di due classi e la connessione.
Altri suggerimenti
Mi chiedo se questo funziona bene
Probabilmente proveremo questo perché è una licenza apache.
Sto usando un java.util.ArrayDeque<Byte>
in un progetto con requisiti simili. Si noti che è possibile modificare facilmente l'implementazione utilizzando java.util.concurrent Queue
implementazione.
Ho scritto una tale classe: ByteRingBuffer
Non si ridimensiona automaticamente, ma esiste un metodo resize ().
È " ben testato " con un programma di test automatico, che utilizza numeri casuali per testare tutte le possibili situazioni.
Un'altra soluzione è utilizzare GrowablePipedOutputStream e GrowablePipedInputStream di JBoss.