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, NIOund es macht wenig Sinn, eine API und ihren konzeptionellen Nachfolger in derselben Version einzuführen.
Ich habe auch die Apache Commons- IOUtilsKlasse gefunden, also:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")wäre verlustfrei.
Stringin ein byte[]Array, um die Bytes dann wieder in chars 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) ReaderFunktionalität aus InputStreamReaderoder b) InputStreamFunktionalität herauszuholen InputStreamReader? Sie werden nicht b) bekommen. InputStreamReaderist kein InputStream.
Der Zweck von InputStreamReaderist 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, Readeraus 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.