14

LogManager.readConfiguration()文字列からコンテンツを取得したいInputStreamを必要とする作業を行っています。StringBufferInputStream廃止されていないものに相当するものはありReaderToInputStreamAdaptorますか?

4

3 に答える 3

9

ByteArrayInputStreamを使用し、適切な文字エンコードを指定するように注意してください。例えば

ByteArrayInputStream(str.getBytes("UTF8"));

各文字がどのようにバイトのセットに変換されるかを決定するには、文字エンコードについて心配する必要があります。getBytes()デフォルトの方法を使用して、JVMが実行するエンコーディングを指定できることに注意してください。-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エスケープが削除されました、AlanMooreが示唆しています

于 2010-01-28T23:10:20.890 に答える