java - Java 读取 HTTP 响应(使用 StringBuilder)比在 python 中慢得多
问题描述
我正在调用一个返回大响应的 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;
}
解决方案
推荐阅读
- python - 如何从文件夹中将音频文件拆分为多个音频 wav 文件
- database - pgadmin 和 pgmodeler 可以连接到 Google Cloud Spanner 吗?
- javascript - 如何限制 Vue 中的分页按钮?
- python-3.x - 多重超级继承的单元测试(在pytest中)
- go - VSCode 不为每个 Go Editor 选项卡启用链接
- r - Favstats (R-Mosaic) 由于非数字变量而返回错误,尽管变量只是数字
- html - 如何在jquery中获取选中复选框的ID
- javascript - Vue - 如何在甜蜜警报中加载组件?
- domain-driven-design - DDD 战略设计:共享内核模式与发布语言模式
- spring - 如何使用 Spring Boot Crudrepository 将数据插入到同一数据库中的 2 个表中?