質問

出力を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 です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top