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 NIOi nie ma sensu wprowadzać API i jego następcy koncepcyjnego w tej samej wersji.
Znalazłem także IOUtilsklasę apache commons , więc:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")byłby bezstratny.
Stringdo byte[]tablicy do konwersji bajtów z powrotem do chars 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) Readerfunkcjonalność InputStreamReaderlub b) InputStreamfunkcjonalność InputStreamReader? Nie dostaniesz b). InputStreamReadernie jest InputStream.
Celem InputStreamReaderjest 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ć Readersię 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.