Risposte:
ByteArrayInputStream fa anche il trucco:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Quindi converti in lettore:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream : Since: JDK1.0 Non c'è il minimo motivo di ritenere che questa classe sia "da Java 1.4". Quel numero di versione errato è particolarmente strano come introdotto in Java 1.4 NIOed ha poco senso introdurre un'API e il suo successore concettuale nella stessa versione.
Ho anche trovato la IOUtilsclasse commons apache , quindi:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")sarebbe senza perdita di dati.
Stringin un byte[]array per convertire i byte in chars poi ...
Deve essere specificamente un InputStreamReader? Che ne dici di usare StringReader ?
Altrimenti, potresti usare StringBufferInputStream , ma è obsoleto a causa di problemi di conversione dei caratteri (motivo per cui dovresti preferire StringReader).
Stessa domanda di @Dan - perché non StringReader?
Se deve essere InputStreamReader, quindi:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
Stai cercando di ottenere a) Readerfunzionalità da InputStreamReadero b) InputStreamfunzionalità da InputStreamReader? Non otterrai b). InputStreamReadernon è un InputStream.
Lo scopo di InputStreamReaderè prendere un InputStream- una fonte di byte - e decodificare i byte in caratteri sotto forma di a Reader. Hai già i tuoi dati come caratteri (la tua stringa originale). Codificare la stringa in byte e decodificare i byte in caratteri sarebbe un'operazione ridondante.
Se stai cercando di Readerestrarre la tua fonte, usa StringReader.
Se stai cercando di ottenere un InputStream(che ti dà solo byte), usa i comuni apache IOUtils.toInputStream(..)come suggerito da altre risposte qui.