6

リモート 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;
}

ご覧のとおり、私は現在 URL をメソッドに渡しています。メソッドは InputStream オブジェクトを使用してファイルのバイトを読み取ります。この方法では、Apache Commons IOUtils を使用します。ただし、このメソッド呼び出しは、実行に比較的長い時間がかかる傾向があります。数百、数千、または数十万のファイルを次々と取得すると、非常に遅くなります。このメソッドをより効率的に実行できるように改善する方法はありますか? マルチスレッド化を検討しましたが、最後の手段として取っておきたいと思います。

4

1 に答える 1

2

あなたのやり方は絶対に大丈夫のようです。

しかし、あなたが言うなら:

「しかし、このメソッド呼び出しは、実行に比較的長い時間がかかる傾向があります」

次の問題が発生する可能性があります。

  • ネットワーク、接続の問題

  • 各ファイルを別々のスレッドでダウンロードしてもよろしいですか?

そのためにマルチスレッドを使用している場合は、VM args -XmsYYYYMおよび-XmxYYYYMが適切 に構成されていることを確認してください。そうしないと、プロセッサがすべてのコアを使用していないという問題に直面する可能性があるためです。私はしばらく前にこの問題に直面しました。

于 2014-11-18T19:09:39.710 に答える