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
StringReaderklasy.
Możesz utworzyć za java.io.Readerpomocą java.io.StringReader, ale nie ma adapterów do wzięcia Readeri 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 Stringw 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.