Qual è il miglior buffer di byte circolare ridimensionabile disponibile in Java?

StackOverflow https://stackoverflow.com/questions/325602

  •  11-07-2019
  •  | 
  •  

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?

È stato utile?

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

https://svn.apache.org/repos/asf/etch/releases/release-1.0.0/util/src/main/java/etch/util/CircularByteBuffer.java

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top