Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使读取客户端请求模块非常高效(HTTP)?_Java_Algorithm_Http_Webserver_Buffer - Fatal编程技术网

Java 如何使读取客户端请求模块非常高效(HTTP)?

Java 如何使读取客户端请求模块非常高效(HTTP)?,java,algorithm,http,webserver,buffer,Java,Algorithm,Http,Webserver,Buffer,我正在构建我的HTTP WEB服务器。在这个项目中,我制作了一个模块来读取客户机请求,但这是非常低效的。因此,请提出一些建议,我如何才能使这个模块非常有效。我正在共享执行读取请求任务的代码。见下文 等待你的建议。提前谢谢 我的部分代码 final static int BUF_SIZE = 2048; byte[] buf = new byte[BUF_SIZE]; private Socket s; InputStream is = new BufferedInputStream(s.getI

我正在构建我的HTTP WEB服务器。在这个项目中,我制作了一个模块来读取客户机请求,但这是非常低效的。因此,请提出一些建议,我如何才能使这个模块非常有效。我正在共享执行读取请求任务的代码。见下文

等待你的建议。提前谢谢

我的部分代码

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;
            }
        }
    }
以特殊字符结尾\r或\n


如何使用任何优化方法将此放入缓冲区。< /P> < P>如果您想加快所有的速度,我会考虑从<代码> java .IO < /C> >转换为<代码> java。NiO< /COD> < /P> 进一步资料:


或者只是谷歌一下;)

如果您正在阅读行,请使用BufferedReader.readLine()。目前,每个字符都要处理两次。但是,考虑到整个过程都会受到网络的限制,我没有理由认为这里存在任何严重的低效。

正如您所建议的,我正在阅读
java.nio
功能。如果我有任何疑问,我会问你的。谢谢你的帮助。:)见编辑编号1。我尝试使用
BufferedReader
,但我没有想到。请帮助我。定义“没有得到想法”。此请求放置在InputStream中。我没有获得将此请求移动到缓冲区的方法。我尝试了
java.nio
,但没有找到合适的方法。您能告诉我应该用什么方法从InputStream填充缓冲区吗?此外,我必须处理缓冲区的前几个字符,因为它包含请求类型,即GET、PUT、HEAD等。
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