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

Java读取HTTP响应(使用StringBuilder)比python慢得多,java,python,performance,http,stringbuilder,Java,Python,Performance,Http,Stringbuilder,我正在调用一个Web服务,它返回一个大响应,大约59兆字节的数据。 以下是我从Java中阅读它的方式: BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8")); result = result.concat(this.getResponseText(in)); private String getResponseText(Buffer

我正在调用一个Web服务,它返回一个大响应,大约59兆字节的数据。 以下是我从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;
}
私有列表getResponseTextAsList(BufferedReader in)引发IOException{
System.out.println(“开始读取”);
列表l=新的ArrayList();
int i=0;
长q=0;
字符串行=”;
而((line=in.readLine())!=null){
//l、 添加(行);
i++;
q=q+line.length();
}
in.close();
System.out.println(“完成”+i+“”+q);
返回l;
}

我不确定您的具体问题是什么。但我可以证实,许多(并非所有)任务可以比Java运行得更快,代码也要少得多。具体的问题是——我用Java阅读它的方式真的是最好、最快的方式吗?你应该编辑你的问题。这可能取决于数据包到达的速度吗?使用Windows资源管理器您是如何对此进行分析的(多少次,什么控制)?Java也有一个很慢的开始,Python没有。我打赌你不需要将它作为一个巨大的字符串返回。无论您在响应体上执行什么处理,都要分块执行(例如一次一行)。