非弃用的StringBufferInputStream等价物

Kal*_*son 13 java string inputstream deprecated

我正在使用LogManager.readConfiguration()它需要一个InputStream,其内容我想来自一个字符串.是否存在相应StringBufferInputStream的不被弃用的内容,例如ReaderToInputStreamAdaptor

Bri*_*new 8

使用ByteArrayInputStream,并注意指定适当的字符编码.例如

ByteArrayInputStream(str.getBytes("UTF8"));
Run Code Online (Sandbox Code Playgroud)

您需要担心字符编码以确定每个字符如何转换为一组字节.请注意,您可以使用默认getBytes()方法并指定JVM通过via运行的编码-Dfile.encoding=...


Kev*_*vin 5

请参见java.io.ByteArrayInputStream

String s = "test";
InputStream input = new ByteArrayInputStream(s.getBytes("UTF8"));
Run Code Online (Sandbox Code Playgroud)

  • 然后他可以将ISO-8859-1编码传递给getBytes() (3认同)

axt*_*avt 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"));
Run Code Online (Sandbox Code Playgroud)

编辑:纠正编码算法

EDIT2:实际上,java.util.Properties格式还有一些其他限制(例如转义\和其他特殊字符),请参阅文档

EDIT3: 0x00-0x1f 转义被删除,正如艾伦摩尔建议的那样