Ich habe eine String
, die ich als verwenden möchte InputStream
. In Java 1.0 könnten Sie verwenden java.io.StringBufferInputStream
, aber das war @Deprecrated
(aus gutem Grund - Sie können die Zeichensatzcodierung nicht angeben):
Diese Klasse konvertiert Zeichen nicht richtig in Bytes. Ab JDK 1.1 ist die bevorzugte Methode zum Erstellen eines Streams aus einer Zeichenfolge die
StringReader
Klasse.
Sie können ein java.io.Reader
mit erstellen java.io.StringReader
, aber es gibt keine Adapter, um ein zu Reader
erstellen InputStream
.
Ich habe einen alten Fehler gefunden , der nach einem geeigneten Ersatz gefragt hat, aber so etwas gibt es nicht - soweit ich das beurteilen kann.
Die häufig vorgeschlagene Problemumgehung besteht darin, Folgendes java.lang.String.getBytes()
als Eingabe zu verwenden java.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
Dies bedeutet jedoch, das gesamte String
Speicher als Array von Bytes zu materialisieren und den Zweck eines Streams zu vereiteln. In den meisten Fällen ist dies keine große Sache, aber ich suchte nach etwas, das die Absicht eines Streams bewahrt - dass so wenig Daten wie möglich im Speicher (wieder) materialisiert werden.