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 NIO
ed ha poco senso introdurre un'API e il suo successore concettuale nella stessa versione.
Ho anche trovato la IOUtils
classe commons apache , quindi:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
sarebbe senza perdita di dati.
String
in un byte[]
array per convertire i byte in char
s 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) Reader
funzionalità da InputStreamReader
o b) InputStream
funzionalità da InputStreamReader
? Non otterrai b). InputStreamReader
non è 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 Reader
estrarre 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.