私はJavaソケットプログラミング(Apache HTTPクライアントまたはその他のAPIではなく)を使用するJavaを使用してカールのようなプログラムを作成しようとしています ユーザへのリクエストを受け取ったときの応答の全体または唯一のボディを表示します。現在、次のコードを思い付いた:verboseオプションがオンの場合分離リクエストを取得する応答ソケットをJavaソケットプログラミング
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String t;
while ((t = br.readLine()) != null) {
if (t.isEmpty() && !parameters.isVerbose()) {
StringBuilder responseData = new StringBuilder();
while ((t = br.readLine()) != null) {
responseData.append(t).append("\r\n");
}
System.out.println(responseData.toString());
parameters.verbose = false;
break;
} else if(parameters.isVerbose())// handle output
System.out.println(t);
}
br.close();
、それが迅速に動作し、1秒未満で全体のレスポンスボディを示しています。しかし、私はメッセージの本文を持っていたいとき、それを手渡すには時間がかかりすぎる(約10秒)。 どのように高速に処理することができますか? ありがとうございます。
ちょうどコメント:コードの構造は非常に奇妙です。内側のループでストリーム全体を消費するため、外側のループは非冗長なケースでは役に立たないからです。また、変数名を修正することもできます( 's'と' t'は明示的な名前ではありません)。 – Dici
冗長スイッチがコード内の別の場所でアクティブになっている可能性はありますか?それは、あなたが一度だけ大文字小文字の 'Connection:close'のようなヘッダーを送るように見えるが、他のケースではないようだ。 – blafasel
@blafaselまったく同じデータとブール値の違いで試しました。私が全部を印刷しているとき、それは完璧かつ高速に動作します。しかし、データだけを処理するときにはかなり遅くなります! – Fezo