我正在尝试为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怎么样?
答案 0 :(得分:0)
首先我想说一下:
int length;
应该是IMO:
long length = 0L;
解决问题的方法可能是增加byte[] buffer = new byte[8192];
也许Request request = Request.parse(buffer, length);
可能会减慢一切。