У меня есть String
, который я хочу использовать как InputStream
. В Java 1.0 вы можете использовать java.io.StringBufferInputStream
, но это было @Deprecrated
(с полным основанием - вы не можете указать кодировку набора символов ):
Этот класс неправильно конвертирует символов в байты. Начиная с JDK 1.1, предпочтительный способ создания потока из строки через
StringReader
класс.
Вы можете создать java.io.Reader
с java.io.StringReader
, но нет адаптеров для принятия Reader
и создания InputStream
.
Я нашел древнюю ошибку с просьбой о подходящей замене, но такой вещи не существует - насколько я могу судить.
Рекомендуемым обходным решением является использование java.lang.String.getBytes()
в качестве входа в java.io.ByteArrayInputStream
:
public InputStream createInputStream(String s, String charset)
throws java.io.UnsupportedEncodingException {
return new ByteArrayInputStream(s.getBytes(charset));
}
но это означает материализацию всего String
в памяти в виде массива байтов и побеждает цель потока. В большинстве случаев это не имеет большого значения, но я искал что-то, что бы сохранить намерение потока - что как можно меньше данных (re) материализовалось в памяти.