Frage

Ich brauche eine Bytepuffer Klasse in Java für Single-Thread. I sollte in der Lage sein, Daten auf der Rückseite des Puffer einzusetzen und Lesen von Daten auf der Vorderseite, mit einem fortgeführten Anschaffungskosten von O (1). Der Puffer sollte die Größe, wenn es voll ist, anstatt eine Ausnahme oder etwas zu werfen.

konnte ich mich ein schreiben, aber ich wäre sehr überrascht, wenn dies noch in einem Standard-Java-Paket nicht existieren, und wenn dies nicht der Fall, würde ich erwarten, dass es in einigen bewährten öffentlichen Bibliothek existieren .

Was würden Sie empfehlen?

War es hilfreich?

Lösung

Nicht sicher, ob es „die beste“, aber Sie haben ein schönes Beispiel für Circular Byte Puffer hier .

Die Java Utilities - OstermillerUtils Klassen sind unter GPL-Lizenz .

  

Dieses Rundschreiben Bytepuffer implementiert den Ringpuffer Producer / Consumer-Modell für Bytes. Füllen und Entleeren des Puffers erfolgt mit Standard-Java-Inputstreams und OutputStreams.

     

Mit dieser Klasse eine einfachere Alternative ist es, eine PipedInputStream und PipedOutputStream zu verwenden.
  PipedInputStreams und PipedOutputStreams Sie die Marke Betrieb nicht unterstützen, nicht erlauben Sie Puffergrößen zu steuern, die sie verwenden, und haben eine kompliziertere API, die eine Instanziierung zwei Klassen und zuschaltet erfordert.

Andere Tipps

Ich frage mich, ob diese funktioniert gut

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

Wir werden wahrscheinlich versuchen diese, da sie Apache-Lizenz ist.

Ich bin mit einem java.util.ArrayDeque<Byte> in einem Projekt mit ähnlichen Anforderungen. Beachten Sie, dass Sie leicht Implementierung unter Verwendung eines java.util.concurrent Queue ändern Umsetzung.

Ich habe eine solche Klasse geschrieben: ByteRingBuffer

Es die Größe nicht automatisch, aber es ist ein Resize () -Methode.

Es ist „gut getestet“ mit einem automatischen Testprogramm, das Zufallszahlen verwendet, um alle möglichen Situationen zu testen.

Eine andere Lösung zu verwenden ist GrowablePipedOutputStream und

scroll top