Mam plik String
, którego chcę użyć jako InputStream
. W Javie 1.0 możesz użyć java.io.StringBufferInputStream
, ale tak było @Deprecrated
(nie bez powodu - nie możesz określić kodowania zestawu znaków):
Ta klasa nie konwertuje poprawnie znaków na bajty. Począwszy od JDK 1.1, preferowanym sposobem tworzenia strumienia z łańcucha jest użycie
StringReader
klasy.
Możesz utworzyć za java.io.Reader
pomocą java.io.StringReader
, ale nie ma adapterów do wzięcia Reader
i utworzenia InputStream
.
Znalazłem starożytny błąd proszący o odpowiednią wymianę, ale nic takiego nie istnieje - o ile wiem.
Często sugerowanym rozwiązaniem jest użycie java.lang.String.getBytes()
jako danych wejściowych do java.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
ale to oznacza materializację całości String
w pamięci jako tablicę bajtów i udaremnia cel strumienia. W większości przypadków nie jest to wielka sprawa, ale szukałem czegoś, co zachowałoby intencję strumienia - aby jak najmniej danych było (ponownie) zmaterializowanych w pamięci.