私はorg.apache.commons.httpclient.methods.PostMethodクラスのgetResponseBody()メソッドを使用しています。ただし、実行時に常にコンソールにメッセージが表示されます。
警告:サイズが大きいか不明な応答本文をバッファリングしようとしています。代わりにgetResponseBodyAsStreamを使用することをお勧めします。
コードでは、とにかくバイト配列に応答を書き込む必要があるので、使用するのはgetResponseBody()メソッドです。しかし、警告メッセージを抑制できる簡単な方法があるので、実行するたびにそれを見る必要はありませんか?
コンパイラエラーの場合は、@ SuppressWarningsアノテーションを使用しますが、これはコンパイル時の問題ではありません。実行時に発生します。また、getResponseBodyAsStreamを使用してByteArrayOutputStreamに書き込むこともできますが、これは警告を回避するための面倒な方法のようです(getResponseBody()がすでに行っていることを行うための追加のコード行)。
私の推測では、答えにはSystem.outまたはSystem.errの操作が含まれますが、これを行うための良い方法はありますか?
警告が示すように、バイト配列ではなくストリームを使用することをお勧めします。プッシュしようとしている応答が特に大きい場合(ファイルが大きい場合)、すべてをメモリにロードしますが、これは非常に悪いことです。
ストリームを使用するほうがよいでしょう。
とはいえ、System.errまたはSystem.outを一時的に置き換えることで、ハッキングする可能性があります。これらは単なるPrintStream
オブジェクトであり、setOutメソッドとsetErrメソッドで設定できます。
PrintStream oldErr = System.err;
PrintStream newErr = new PrintStream(new ByteArrayOutputStream());
System.setErr(newErr);
// do your work
System.setErr(oldErr);
編集:
ストリームを使用する方が望ましいことに同意しますが、現状では、応答を配置する必要があるターゲットAPIはバイト配列です。必要に応じて、ストリームを取得できるようにAPIをリファクタリングできます。そのほうがいい。警告は確実に理由があります。
APIを変更できる場合は、変更してください。この場合、ストリーム処理が最善の方法です。内部の圧力などが原因でできない場合は、@ John Mのルートに移動してポンプを上げてBUFFER_WARN_TRIGGER_LIMIT
ください。ただし、既知のcontentLengthがあることを確認してください。そうでない場合、そのルートも失敗します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加