OutputStreamを文字列に取得します
質問
出力をjava.io.OutputStreamからJavaの文字列にパイプする最良の方法は何ですか?
メソッドがあるとします:
writeToStream(Object o, OutputStream out)
特定のデータをオブジェクトから特定のストリームに書き込みます。ただし、この出力をできるだけ簡単に文字列に変換したいです。
次のようなクラスの作成を検討しています(テストなし):
class StringOutputStream extends OutputStream {
StringBuilder mBuf;
public void write(int byte) throws IOException {
mBuf.append((char) byte);
}
public String getString() {
return mBuf.toString();
}
}
しかし、もっと良い方法はありますか?テストを実行したいだけです!
解決
ByteArrayOutputStream
を使用します。終了したら、次の電話番号に連絡できます:
new String( baos.toByteArray(), codepage );
以上
baos.toString( codepage );
文字列コンストラクタの場合、 codepage
は文字列または java.nio.charset.Charset 。可能な値は java.nio.charsetです。 .StandardCharsets.UTF_8 。
toStringメソッドは、 codepage
パラメーターとしてストリングのみを受け入れます(Java 8に対応)。
他のヒント
Apache Commons IOライブラリが好きです。 ByteArrayOutputStream 。 toString(String enc)
メソッドと toByteArray()
があります。 Commonsプロジェクトのような既存の信頼できるコンポーネントを使用すると、コードをより小さく、より簡単に拡張および再利用できます。
これはうまくいきました
OutputStream output = new OutputStream()
{
private StringBuilder string = new StringBuilder();
@Override
public void write(int b) throws IOException {
this.string.append((char) b );
}
//Netbeans IDE automatically overrides this toString()
public String toString(){
return this.string.toString();
}
};
method call =>> marshaller.marshal((Object)toWrite、(OutputStream)output);
その後、文字列を印刷するか、「出力」を参照するだけにしますストリーム自体
例として、文字列をコンソールに出力するには、=> gt;> System.out.println(output);
FYI:メソッド呼び出し marshaller.marshal(Object、Outputstream)
は、XMLを操作するためのものです。これはこのトピックとは無関係です。
これは、実稼働での使用には非常に無駄が多く、変換が多すぎるため、少しゆるいです。これは、カスタムOuputStreamを作成して文字列を出力することが完全に可能であることを証明するためにコーディングされたものです。しかし、Horcrux7を使用するだけで、メソッド呼び出しは2つだけで十分です。
そして世界は別の日に生きます。...
これが私がやったことです:
Obj.writeToStream(toWrite, os);
try {
String out = new String(os.toByteArray(), "UTF-8");
assertTrue(out.contains("testString"));
} catch (UnsupportedEncondingException e) {
fail("Caught exception: " + e.getMessage());
}
osは ByteArrayOutputStream
です。