-3

私はJavaでWebサーバーを構築し、それを(ソケットとして)要求を取得して処理します。最初にリクエスト全体を印刷してから処理する必要があります。これが私のコードスニペットです:

public HttpRequest(Socket socket) throws Exception
{
    this.socket = socket;
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    printRequest(input);
    // Do More...
}

問題は、この時点から、BufferedReaderが終了し、最初に戻す方法が見つからないように見えることです。このprintRequest()メソッドは、BufferedReaderからの要求全体をwhileループとreadline()アクションで出力します)。

これを修正する方法はありますか?

4

4 に答える 4

0

リクエストを文字列として読み込みます。

String request = readUntilEOF(input);

次に、それで好きなことをします。

System.out.println(request);
process(request);
doFunThingsWith(request);
于 2012-11-27T16:01:51.357 に答える
0

概念的には、ストリームは読み取り時に消費されます。特にソケットから読み取る場合、データは読み取るとすぐに失われます。したがって、「ストリーム」を再読み込みする// Do More場合は、新しいストリームを作成し、受信してどこかに保存したデータをフィードする必要があります。または、読み取ったものをすべてログに記録したい場合は、InputStream をラップして、最終消費者がストリームを消費するとすぐに印刷を行うことができます。

于 2012-11-27T16:02:12.213 に答える
0

BufferedReader を使用してコンテンツを 2 回読み取ることはできません。最初の読み取りの後、読み取り内容を変数に保存して後で使用します。

于 2012-11-27T16:02:22.740 に答える
0

byte配列内のコンテンツを読み取り、必要ByteArrayInputStreamなときにいつでも使用できます。

InputStream is = socket.getInputStream();
byte[] content = new byte[is.available()];
is.read(content);
printRequest(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content))));
processRequest(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content))));
于 2012-11-27T16:08:31.180 に答える