【发布时间】:2017-11-28 19:24:08
【问题描述】:
我用 Java 编写了以下代码,用于在 Raspberry Pi 3 中下载文件:
String fileUrl = "...";
URL urlObj = new URL(fileUrl);
HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
InputStream in = con.getInputStream();
byte[] buffer = new byte[8*1024];
long t = System.nanoTime();
int read;
while ((read = in.read(buffer)) != -1) {
System.out.println("Read " + read + "B in " + (System.nanoTime() - t)/1000000.0 + " ms");
t = System.nanoTime();
}
尽管我使用的是 8 KB 缓冲区,但平均下载速度在 205 毫秒左右为 1389 B,相当于 6.78 KB/s:
我还注意到执行此代码时的 CPU 使用率始终为 25%。由于 RPi 的 CPU 有 4 个内核,我假设它使用 100% 的单核。我知道这是一个弱处理器,但下载文件并不是一项艰巨的任务,所以这种奇怪的行为让我感到困惑。
【问题讨论】:
-
尝试将缓冲区大小从 8k 增加到 256k
-
我试过了。即使缓冲区大小为 1MB,也没有什么区别。
-
rpi 的 curl 速度有多快?
-
你可以试试 Oracle 的 Java 而不是 OpenJava,两者都预装在 Raspbian 中。
-
是的,这听起来像是你正在使用的 jdk 的基本功能。
标签: java performance httpurlconnection raspberry-pi3