Wie kann ich einen String
Wert in einen InputStreamReader
umwandeln?Wie verwandle ich einen String in Java zu einem InputStreamReader?
Antwort
ByteArrayInputStream tut auch den Trick:
InputStream is = new ByteArrayInputStream(myString.getBytes(charset));
Muss es speziell ein InputStreamReader sein? Wie wäre es mit StringReader?
Andernfalls könnten Sie StringBufferInputStream verwenden, aber es ist wegen Zeichenumwandlungsproblemen veraltet (weshalb Sie StringReader bevorzugen sollten).
gleiche Frage wie @Dan - warum nicht String?
Wenn es hat Input, dann sein:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
Ich fand auch die Apache Commons IOUtils
Klasse, so:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
Konvertieren von String-> Byte [] oder umgekehrt, ohne eine Zeichenkodierung zu erwähnen, ist fast immer ein Fehler. –
Dies kann zu Datenverlust führen, abhängig von der standardmäßigen Plattformcodierung und Zeichen in der Zeichenfolge. Die Angabe einer Unicode-Codierung für Codierungs- und Decodierungsvorgänge wäre besser. Lesen Sie diese für weitere Details: http://illegalargumenttexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html#javaencoding_lossyconversions – McDowell
Ist nicht die Codierung param nur benötigt, um Bytes in einem bestimmten erhalten Codierung? Ich denke, solange Sie die selbe Codierung für den String # getBytes-Aufruf wählen, wie Sie für den InputSTreamReader-Konstruktor wählen, ist es nicht wirklich wichtig, welche Sie auswählen. Ich bin mir ziemlich sicher, dass Joachim und McDowell in diesem speziellen Fall falsch liegen. Kein Codierungswissen zum Umbrechen eines InputStreamReaders um einen String erforderlich. –
Sind Sie versuchen, eine) Reader
Funktionalität aus InputStreamReader
zu erhalten oder b) InputStream
Funktionalität aus InputStreamReader
? Du wirst nicht b) bekommen. InputStreamReader
ist kein InputStream
.
Der Zweck von InputStreamReader
ist, eine InputStream
- eine Quelle von Bytes - und dekodieren die Bytes zu Zeichen in Form einer Reader
. Sie haben Ihre Daten bereits als Zeichen (Ihre ursprüngliche Zeichenfolge). Das Codieren Ihrer Zeichenfolge in Bytes und das Decodieren der Bytes zurück zu Zeichen wären eine redundante Operation. Wenn Sie versuchen, eine Reader
aus Ihrer Quelle zu erhalten, verwenden Sie StringReader
.
Wenn Sie versuchen, eine InputStream
(die nur Bytes gibt) zu erhalten, verwenden Sie Apache Commons IOUtils.toInputStream(..)
wie von anderen Antworten hier vorgeschlagen.
Sie können Cactoos versuchen:
InputStream stream = new InputStreamOf(str);
Dann, wenn Sie eine Reader
benötigen:
Reader reader = new ReaderOf(stream);
wirklich die charset angeben sollten, um auf der sicheren Seite zu sein. – toolkit
Möglicherweise wollen Sie * den Standard-Zeichensatz der Plattform erben. – slim
Danke. Erledigt. Was ist der beste Weg, den Standard-Charset des Plataforms zu erkennen? –