Odpowiedzi:
ByteArrayInputStream robi także lewę:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Następnie przekonwertuj na czytnik:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: Od: JDK1.0 Nie ma najmniejszego powodu, aby zakładać, że ta klasa jest „od Java 1.4”. Ten nieprawidłowy numer wersji jest szczególnie dziwny, gdy wprowadzono Javę 1.4 NIO
i nie ma sensu wprowadzać API i jego następcy koncepcyjnego w tej samej wersji.
Znalazłem także IOUtils
klasę apache commons , więc:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
byłby bezstratny.
String
do byte[]
tablicy do konwersji bajtów z powrotem do char
s potem ...
Czy musi to być konkretnie InputStreamReader? Co powiesz na korzystanie z StringReader ?
W przeciwnym razie możesz użyć StringBufferInputStream , ale jest on przestarzały z powodu problemów z konwersją znaków (dlatego powinieneś preferować StringReader).
To samo pytanie co @Dan - dlaczego nie StringReader?
Jeśli musi to być InputStreamReader, to:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
Czy próbujesz uzyskać a) Reader
funkcjonalność InputStreamReader
lub b) InputStream
funkcjonalność InputStreamReader
? Nie dostaniesz b). InputStreamReader
nie jest InputStream
.
Celem InputStreamReader
jest pobranie InputStream
- źródła bajtów - i zdekodowanie bajtów na znaki w postaci Reader
. Masz już swoje dane jako znaki (oryginalny ciąg). Kodowanie łańcucha w bajtach i dekodowanie bajtów z powrotem do znaków byłoby operacją nadmiarową.
Jeśli próbujesz wydostać Reader
się ze źródła, użyj StringReader
.
Jeśli próbujesz uzyskać InputStream
(który daje tylko bajty), użyj apache commons, IOUtils.toInputStream(..)
jak sugerują inne odpowiedzi tutaj.