-1

HTTP WEB SERVERを構築しています。このプロジェクトでは、クライアントの要求を読み取るモジュールを 1 つ作成しましたが、これは非常に非効率的です。どうすればこのモジュールを非常に効率的にすることができますか。読み取り要求タスクを実行するコードを共有しています。下記参照、

あなたの提案を待っています。前もって感謝します。

私のコードの一部

final static int BUF_SIZE = 2048;
byte[] buf = new byte[BUF_SIZE];
private Socket s;
InputStream is = new BufferedInputStream(s.getInputStream());
int nread = 0, r = 0;

    outerloop:
    while (nread < BUF_SIZE) {
        r = is.read(buf, nread, BUF_SIZE - nread);
        if (r == -1) {
            /* EOF */
            return;
        }
        int i = nread;
        nread += r;
        for (; i < nread; i++) {
            if (buf[i] == (byte) '\n' || buf[i] == (byte) '\r') {
                /* read one line */
                break outerloop;
            }
        }
    }

編集番号 1

以下はクライアントからのリクエストで、is

GET / HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

これは特殊文字 \r または \n で終わります。

最適化された方法を使用して、これをバッファに入れるにはどうすればよいですか。

4

2 に答える 2

0

行を読み取る場合は、BufferedReader.readLine() を使用します。現在、すべての文字を 2 回処理しています。しかし、プロセス全体がネットワークに依存することを考えると、ここに大きな非効率性があると考える理由はありません。

于 2013-05-02T12:42:45.283 に答える
0

すべてをスピードアップしたい場合は、 からjava.ioに切り替えることを検討しjava.nioます。

詳細情報: http://en.wikipedia.org/wiki/New_I/O または、Google で検索してください ;)

于 2013-05-02T10:21:38.587 に答える