提高read()的性能

时间:2016-02-07 19:08:50

标签: java android multithreading performance io

我正在尝试为Android编写代理应用程序。 我创建了一个监听localhost和端口的ServerSocket。 当浏览器请求站点时,我打开一个带有Socket的新线程并读取输入流。

问题:读取呼叫太慢。它需要长达一秒钟。 我不认为浏览器的输出流很慢。

public Request readRequest() {
    int length;
    byte[] buffer = new byte[8192];

    long startTime = System.nanoTime(); // Messure starts
    while ((length = in.read(buffer)) != 0) {
        Log.d("PERFORMANCE", "read() needs " + (System.nanoTime() - startTime)/1000000 + " ms for: " + length + " bytes"); // Messure ends

        Request request = Request.parse(buffer, length);
        if (request != null) {
            // read bytes contained a complete Request
            return request;
        }

        // request is incomplete -> read more        
        startTime = System.nanoTime();
    }

    return null;
}

我认为它可能是一个调度问题,所以我已经尝试增加当前Thread的优先级。它略微提高了速度。

还有另一种方法可以减少空闲时间或延迟吗? NDK / JNI怎么样?

1 个答案:

答案 0 :(得分:0)

首先我想说一下:

int length;

应该是IMO:

long length = 0L;

解决问题的方法可能是增加byte[] buffer = new byte[8192];

的缓冲区大小

也许Request request = Request.parse(buffer, length);可能会减慢一切。