Jak mogę przekształcić String
wartość w InputStreamReader
?
281
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.4NIO
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:źródło
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
byłby bezstratny.String
dobyte[]
tablicy do konwersji bajtów z powrotem dochar
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).
źródło
To samo pytanie co @Dan - dlaczego nie StringReader?
Jeśli musi to być InputStreamReader, to:
źródło
byte[] bytes = charset.getBytes();
Czy próbujesz uzyskać a)
Reader
funkcjonalnośćInputStreamReader
lub b)InputStream
funkcjonalnośćInputStreamReader
? Nie dostaniesz b).InputStreamReader
nie jestInputStream
.Celem
InputStreamReader
jest pobranieInputStream
- źródła bajtów - i zdekodowanie bajtów na znaki w postaciReader
. 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żyjStringReader
.Jeśli próbujesz uzyskać
InputStream
(który daje tylko bajty), użyj apache commons,IOUtils.toInputStream(..)
jak sugerują inne odpowiedzi tutaj.źródło
Możesz wypróbować Cactoos :
Następnie, jeśli potrzebujesz
Reader
:źródło