我正在使用LogManager.readConfiguration()
它需要一个 InputStream,我希望它的内容来自一个字符串。是否有StringBufferInputStream
不被弃用的等价物,例如ReaderToInputStreamAdaptor
?
问问题
8941 次
3 回答
9
使用ByteArrayInputStream,并注意指定适当的字符编码。例如
ByteArrayInputStream(str.getBytes("UTF8"));
您需要担心字符编码以确定每个字符如何转换为一组字节。请注意,您可以使用默认getBytes()
方法并指定 JVM 运行时使用的编码 via-Dfile.encoding=...
于 2010-01-28T22:57:37.087 回答
5
请参阅java.io.ByteArrayInputStream
String s = "test";
InputStream input = new ByteArrayInputStream(s.getBytes("UTF8"));
于 2010-01-28T22:53:42.727 回答
4
文档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"));
编辑:编码算法更正
EDIT2:实际上,java.util.Properties
格式还有一些其他限制(例如转义\
和其他特殊字符),请参阅文档
EDIT3: 0x00-0x1f 转义被移除,正如 Alan Moore 所建议的那样
于 2010-01-28T23:10:20.890 回答