Ich habe eine String
, die ich als InputStream
verwenden möchte. In Java 1.0, könnten Sie java.io.StringBufferInputStream
, verwenden aber das hat @Deprecrated
gewesen (mit gutem Grund - nicht den Zeichensatz-Codierung angeben):Wie kann ich einen java.io.InputStream von einem java.lang.String bekommen?
Diese Klasse Zeichen in Bytes nicht richtig konvertieren. Ab JDK 1.1, ist die bevorzugte Methode zum Erstellen eines Streams aus einer Zeichenfolge über die
StringReader
Klasse.
Sie können eine java.io.Reader
mit java.io.StringReader
erstellen, aber es gibt keine Adapter eine Reader
zu nehmen und eine InputStream
zu erstellen.
Ich fand eine ancient bug Frage nach einem geeigneten Ersatz, aber so etwas existiert nicht - soweit ich das beurteilen kann.
Die oft vorgeschlagene Abhilfe ist java.lang.String.getBytes()
als Eingabe für java.io.ByteArrayInputStream
zu verwenden:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
aber das heißt, die gesamten String
im Speicher als eine Reihe von Bytes zu materialisieren, und den Zweck des Stroms. In den meisten Fällen ist das keine große Sache, aber ich suchte nach etwas, das die Absicht eines Streams bewahren würde - dass so wenig Daten wie möglich im Speicher (re) materialisiert werden.
@djb Nur so. –