Jak mogę przekształcić wartość String
na InputStreamReader
?Jak zmienić ciąg w InputStreamReader w java?
Odpowiedz
ByteArrayInputStream robi również trick:
InputStream is = new ByteArrayInputStream(myString.getBytes(charset));
Czy to musi być konkretnie InputStreamReader? Jak korzystać z StringReader?
W przeciwnym razie można użyć StringBufferInputStream, ale jest przestarzałe z powodu problemów z konwersją znaków (dlatego powinieneś preferować StringReader).
samo pytanie jak @Dan - dlaczego nie StringReader?
Jeśli ma być InputStreamReader, a następnie:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
I także, że Apache Commons IOUtils
klasę, więc:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
Konwersja String-> byte [] lub na odwrót bez wspominania o kodowaniu znaków jest prawie zawsze błędem. –
Może to spowodować utratę danych, w zależności od domyślnego kodowania platformy i znaków w łańcuchu. Określenie kodowania Unicode dla operacji kodowania i dekodowania byłoby lepsze. Przeczytaj ten artykuł, aby uzyskać więcej informacji: http://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html#javaencoding_lossyconversions – McDowell
Czy kodowanie nie jest potrzebne, aby uzyskać bajty w pewnych kodowanie? Myślę, że tak długo jak wybierzesz to samo kodowanie dla wywołania String # getBytes, gdy wybierzesz konstruktor InputStreamReader, nie ma to znaczenia, który wybierzesz. Jestem pewien, że Joachim i McDowell nie mają racji w tym konkretnym przypadku. Brak wiedzy o kodowaniu potrzebnej do zawijania InputStreamReader wokół String. –
starasz się dostać) Reader
funkcjonalność z InputStreamReader
lub b) InputStream
funkcjonalność z InputStreamReader
? Nie dostaniesz b). InputStreamReader
nie jest InputStream
.
Celem InputStreamReader
jest pobranie InputStream
- źródła bajtów - i dekodowanie bajtów do znaków w postaci Reader
. Masz już swoje dane jako znaki (twój oryginalny ciąg). Zakodowanie ciągu znaków w bajtach i odszyfrowanie bajtów z powrotem do znaków będzie działaniem nadmiarowym.
Jeśli próbujesz uzyskać Reader
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.
Można spróbować Cactoos:
InputStream stream = new InputStreamOf(str);
Następnie, jeśli potrzebujemy Reader
:
Reader reader = new ReaderOf(stream);
naprawdę powinny określić charset, aby być po bezpiecznej stronie. – toolkit
Możesz * chcieć * dziedziczyć domyślny zestaw znaków platformy. – slim
Dzięki. Gotowe. Jaki jest najlepszy sposób na wykrycie domyślnego zestawu znaków plataform? –