优化BufferedReader readLine()操作

时间:2015-07-19 12:13:09

标签: java bufferedreader stringbuilder

我正在尝试使用HttpsURLConnection从服务器读取回复。

InputStreamReader in = new InputStreamReader((InputStream) con.getContent());
    BufferedReader buff = new BufferedReader(in);

    String line;
    StringBuilder response=new StringBuilder();
    long st=System.nanoTime();

    while ((line =buff.readLine())!= null) {
        response=response.append(line +"\n");

    } 

    long et=System.nanoTime();
    System.out.println("resp process time: "+((et-st))+" ns");
    return response.toString();
}

目前,读取包含约80000个字符(1100行)的整个响应大约需要450毫秒。

输出:resp处理时间:435272240 ns

是否可以进一步优化此代码以缩短处理时间?

1 个答案:

答案 0 :(得分:1)

您创建了一个不必要的临时字符串line + "\n"。你可以避免这种情况。

while ((line = buff.readLine()) != null) {
    response.append(line).append('\n');
} 

您还可以避免使用BufferedReader(无需扫描输入以进行换行)。

InputStreamReader in = ...
char buffer[] = new char[8192];
int count;
while ((count = in.read(buffer)) != -1)
    response.append(buffer, 0, count);