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