Я работаю с LogManager.readConfiguration()
, для которого требуется InputStream, содержимое которого я хотел бы получить из строки. Существует ли эквивалент StringBufferInputStream
, который не устарел, например ReaderToInputStreamAdaptor
?
Не устаревший эквивалент StringBufferInputStream
Ответ 1
Документация LogManager.readConfiguration()
говорит, что он принимает данные в java.util.Properties
. Итак, действительно правильная реализация, безопасная для кодирования, такова:
String s = ...;
StringBuilder propertiesEncoded = new StringBuilder();
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if (c <= 0x7e) propertiesEncoded.append((char) c);
else propertiesEncoded.append(String.format("\\u%04x", (int) c));
}
ByteArrayInputStream in = new ByteArrayInputStream(propertiesEncoded.toString().getBytes("ISO-8859-1"));
EDIT: Исправлен алгоритм кодирования
EDIT2: На самом деле формат java.util.Properties
имеет некоторые другие ограничения (например, экранирование \
и других специальных символов), см. docs
EDIT3: 0x00-0x1f удаляется, так как Алан Мур предлагает
Ответ 2
Используйте ByteArrayInputStream и будьте осторожны, чтобы указать подходящую кодировку символов. например.
ByteArrayInputStream(str.getBytes("UTF8"));
Вам нужно беспокоиться о кодировке символов, чтобы определить, как каждый символ преобразуется в набор байтов. Обратите внимание, что вы можете использовать метод getBytes()
по умолчанию и указать кодировку JVM с помощью -Dfile.encoding=...
Ответ 3
См. java.io.ByteArrayInputStream
String s = "test";
InputStream input = new ByteArrayInputStream(s.getBytes("UTF8"));