2010-12-09 11 views
2

Ich habe eine Klasse CBZip2OutputStream von "apache bzi2 library", es kann Binärdatenstrom in bzi2 Datenstrom verwandeln. Aber ich muss eine Zeichenfolge archivieren. Daher denke ich, ich sollte einen Eingabestream von diesem Ausgabestrom erstellen, diese Daten in Ausgabestrom schreiben und archivierte Daten aus dem Eingabestream lesen ... aber wie Ausgabestrom und Eingabestream verknüpfen?Java: OutputStream und InputStream

Antwort

1

Zuerst möchten Sie wahrscheinlich einen DataOutputStream: Er ist entworfen, um Primitive und Objekte zu nehmen und sie in Bytes umzuwandeln. Es behandelt auch Strings.

Als nächstes verwenden Sie Piped-E/A: PipedInputStream und PipedOutputStream. Sie können sie verwenden, um Streams miteinander zu verknüpfen, ähnlich wie bei der Eingabe von Pipes von einem Prozess in einen anderen über die Befehlszeile.

2

Sie können einfach aus dem Eingabestream lesen und in den Ausgabestream schreiben. Es ist eine gängige Praxis. IOUtils.copy() (aus jakarta commons) tut es, also müssen Sie die Schleife nicht implementieren.

Alternativ können Sie PipedInputStream und PipedOutputStream verwenden.

0

Sie können mehrere Methoden verwenden, um einen InputStream aus einem OutputStream zu erhalten.

  • Schreiben Sie die Daten, um die Daten in einen Speicherpuffer (ByteArrayOutputStream) die byteArray bekommen und es wieder mit einem ByteArrayInputStream lesen. Dies ist der beste Ansatz, wenn Sie sicher sind, dass Ihre Daten in den Speicher passen.
  • kopieren Sie Ihre Daten in eine temporäre Datei und lesen Sie sie zurück.
  • Verwenden Sie Pipes: Dies ist der beste Ansatz sowohl für die Speichernutzung und Geschwindigkeit (Sie können die Vorteile der Multi-Core-Prozessoren nutzen) und auch die Standardlösung von Oracle.
  • Verwenden Sie "Ringpuffer" oder Rohre durch eine externe Bibliothek.

Hier ist ein .