我正在调用一个返回较大响应(约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;
}