Antworten:
ByteArrayInputStream macht auch den Trick:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Dann zum Leser konvertieren:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: Seit: JDK1.0 Es gibt nicht den geringsten Grund anzunehmen, dass diese Klasse "seit Java 1.4" ist. Diese falsche Versionsnummer ist besonders seltsam, als Java 1.4 eingeführt wurde, NIO
und es macht wenig Sinn, eine API und ihren konzeptionellen Nachfolger in derselben Version einzuführen.
Ich habe auch die Apache Commons- IOUtils
Klasse gefunden, also:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
wäre verlustfrei.
String
in ein byte[]
Array, um die Bytes dann wieder in char
s umzuwandeln ...
Muss es sich speziell um einen InputStreamReader handeln? Wie wäre es mit StringReader ?
Andernfalls könnten Sie StringBufferInputStream verwenden , der jedoch aufgrund von Problemen bei der Zeichenkonvertierung veraltet ist (weshalb Sie StringReader bevorzugen sollten).
Gleiche Frage wie @Dan - warum nicht StringReader?
Wenn es InputStreamReader sein muss, dann:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
Versuchen Sie, a) Reader
Funktionalität aus InputStreamReader
oder b) InputStream
Funktionalität herauszuholen InputStreamReader
? Sie werden nicht b) bekommen. InputStreamReader
ist kein InputStream
.
Der Zweck von InputStreamReader
ist es, eine InputStream
- eine Quelle von Bytes - zu nehmen und die Bytes in Form von a in Zeichen zu dekodieren Reader
. Sie haben Ihre Daten bereits als Zeichen (Ihre ursprüngliche Zeichenfolge). Das Codieren Ihres Strings in Bytes und das Zurückcodieren der Bytes in Zeichen wäre eine redundante Operation.
Wenn Sie versuchen, Reader
aus Ihrer Quelle herauszukommen, verwenden SieStringReader
.
Wenn Sie versuchen, ein InputStream
(das Ihnen nur Bytes gibt) zu erhalten, verwenden Sie Apache Commons, IOUtils.toInputStream(..)
wie in anderen Antworten hier vorgeschlagen.