Java读取HTTP响应(使用StringBuilder)比python慢​​得多

时间:2018-07-26 18:04:26

标签: java python performance http stringbuilder

我正在调用一个返回较大响应(约59兆字节数据)的Web服务。 这就是我从Java读取的方式:

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
        result = result.concat(this.getResponseText(in));

private String getResponseText(BufferedReader in) throws IOException {
    StringBuilder response = new StringBuilder(Integer.MAX_VALUE/2);

    System.out.println("Started reading");
    String line = "";
    while((line = in.readLine()) != null) {
        response.append(line);
        response.append("\n");
    }

    in.close();

    System.out.println("Done");
    String r = response.toString();
    System.out.println("Built r");

    return r;
}

在阅读期间,在Windows资源管理器中,我可以看到每秒约100000字节的吞吐量。

但是,当我从python中的同一Web服务读取完全相同的数据时,即:

response = requests.request("POST", url, headers=headers, verify=False, json=json)

我可以看到吞吐量高达每秒700000字节(快7倍)。而且代码完成速度快了7倍。

问题是-我是否缺少可以使Java中的读取速度更快的内容?这样真的是我读取Java HTTP响应的最快方法吗?

更新-即使在我不阅读而是通过响应后,我仍然最多仍为100000字节/秒,因此我认为瓶颈在Java读取方式的某个方面:

private List<String> getResponseTextAsList(BufferedReader in) throws IOException {
    System.out.println("Started reading");

    List<String> l = new ArrayList<String>();
    int i = 0;
    long q = 0;
    String line = "";
    while((line = in.readLine()) != null) {
        //l.add(line);
        i++;
        q = q+line.length();
    }

    in.close();

    System.out.println("Done" + i + " " + q);

    return l;
}

0 个答案:

没有答案