633

出力をjava.io.OutputStreamからJavaの文字列にパイプする最良の方法は何ですか?

私が方法を持っているとしましょう:

  writeToStream(Object o, OutputStream out)

オブジェクトから特定のストリームに特定のデータを書き込みます。ただし、この出力をできるだけ簡単に String に取得したいと考えています。

私はこのようなクラスを書くことを考えています(未テスト):

class StringOutputStream extends OutputStream {

  StringBuilder mBuf;

  public void write(int byte) throws IOException {
    mBuf.append((char) byte);
  }

  public String getString() {
    return mBuf.toString();
  }
}

しかし、より良い方法はありますか?テストを実行したいだけです!

4

5 に答える 5

663

を使用しByteArrayOutputStreamます。そして最後にあなたは呼び出すことができます:

new String( baos.toByteArray(), codepage );

またはそれ以上:

baos.toString( codepage );

Stringコンストラクターの場合、 java.nio.charset.Charsetのインスタンスまたはインスタンスにcodepageすることができます。可能な値はjava.nio.charset.StandardCharsets.UTF_8です。String

このメソッドは、パラメーターとして atoString()のみを受け入れます (スタンド Java 8)。Stringcodepage

于 2008-10-19T20:15:38.930 に答える
50

私は Apache Commons IO ライブラリが好きです。メソッドと. _ toString(String enc)_ toByteArray()Commons プロジェクトのような既存の信頼できるコンポーネントを使用すると、コードが小さくなり、拡張や転用が容易になります。

于 2008-10-19T20:23:26.997 に答える
27

これはうまくいきました

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();
    }
};

メソッド呼び出し =>>marshaller.marshal( (Object) toWrite , (OutputStream) output);

次に、文字列を出力するか、単に「出力」ストリーム自体を参照して取得します。例として、文字列をコンソールに出力するには =>>System.out.println(output);

参考までに、私のメソッド呼び出しmarshaller.marshal(Object,Outputstream)は XML を操作するためのものです。このトピックとは無関係です。

これは本番環境での使用には非常に無駄が多く、変換が多すぎて少し緩いです。これは、カスタム OuputStream を作成して文字列を出力することが完全に可能であることを証明するためにコード化されたものです。しかし、Horcrux7 の方法で行けば、2 つのメソッド呼び出しだけですべてがうまくいきます。

そして、世界は別の日に生きています....

于 2009-06-20T20:13:22.413 に答える
18

これが私がやったことです:

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.

于 2008-11-03T21:04:55.117 に答える
6
baos.toString(StandardCharsets.UTF_8);

指定された文字セットを使用してバイトをデコードすることにより、バッファの内容を文字列に変換します。

Java 17 - https://docs.oracle.com/

于 2020-05-19T05:48:13.223 に答える