У мене є 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
в пам'яті як масив байтів і перешкоджає призначенню потоку. У більшості випадків це не є великою справою, але я шукав щось, що могло б зберегти намір потоку - щоб якомога менше даних (пере) матеріалізувалося в пам'яті.