2008-10-29 8 views

Antwort

278

ByteArrayInputStream tut auch den Trick:

InputStream is = new ByteArrayInputStream(myString.getBytes(charset)); 
+6

wirklich die charset angeben sollten, um auf der sicheren Seite zu sein. – toolkit

+2

Möglicherweise wollen Sie * den Standard-Zeichensatz der Plattform erben. – slim

+1

Danke. Erledigt. Was ist der beste Weg, den Standard-Charset des Plataforms zu erkennen? –

31

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).

16

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); 
+0

Schön, aber die zweite Zeile sollte sein: byte [] bytes = charset.getBytes(); ' – abi1964

+1

Ich denke nicht, dass Abhishek. In meinem Beispiel ist string die Instanz von String, auf die Sie mit einem InputStreamReader zugreifen möchten. – toolkit

58

Ich fand auch die Apache Commons IOUtils Klasse, so:

InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString)); 
+31

Konvertieren von String-> Byte [] oder umgekehrt, ohne eine Zeichenkodierung zu erwähnen, ist fast immer ein Fehler. –

+1

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

+0

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. –

2

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.

2

Sie können Cactoos versuchen:

InputStream stream = new InputStreamOf(str); 

Dann, wenn Sie eine Reader benötigen:

Reader reader = new ReaderOf(stream);