У меня есть файл, 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
в памяти в виде массива байтов и лишает смысла поток. В большинстве случаев это не имеет большого значения, но я искал что-то, что сохраняло бы намерение потока - чтобы как можно меньше данных (ре) материализовалось в памяти.