在Java中有效地从URL读取文件到byte []

Der*_*om8 6 java optimization bytearray file apache-commons-io

我试图找到一种更有效的方法来从远程 URL 读取文件并将其保存到字节数组中。这是我目前拥有的:

private byte[] fetchRemoteFile(String location) throws Exception {
  URL url = new URL(location);
  InputStream is = null;
  byte[] bytes = null;
  try {
    is = url.openStream ();
    bytes = IOUtils.toByteArray(is);
  } catch (IOException e) {
    //handle errors
  }
  finally {
    if (is != null) is.close();
  }
  return bytes;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我目前将 URL 传递给该方法,该方法使用 InputStream 对象读取文件的字节。此方法使用 Apache Commons IOUtils。但是,此方法调用往往需要相对较长的时间才能运行。当一个接一个地检索数百、数千或数十万个文件时,它会变得很慢。有没有办法改进这种方法,使其运行更有效?我已经考虑过多线程,但我想把它作为最后的手段。

Mak*_*sym 2

你的做法看起来绝对没问题。

但如果你说:

“但是,这个方法调用往往需要相对较长的时间来运行”

您可能会遇到以下问题:

  • 网络、连接问题

  • 您确定在单独的线程中下载每个文件吗?

如果您为此使用多线程,请确保 VM 参数-XmsYYYYM-XmxYYYYM 配置良好,因为如果没有,您可能会遇到问题,即您的处理器未使用所有核心。我前段时间遇到过这个问题。