それほど遅くはありませんが、少なくとも速くする方法はありません。しかし、それは間違っています。ファイルが十分に大きい場合、メソッドread()
は最初の呼び出しからすべてのバイトを返しません。このメソッドは、読み取ることができたバイト数を戻り値として返します。
正しい方法は、このメソッドをループで呼び出すことです。
public static void copy(InputStream input,
OutputStream output,
int bufferSize)
throws IOException {
byte[] buf = new byte[bufferSize];
int bytesRead = input.read(buf);
while (bytesRead != -1) {
output.write(buf, 0, bytesRead);
bytesRead = input.read(buf);
}
output.flush();
}
これを次のように呼びます。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
copy(new FileInputStream(myfile), baos);
byte[] bytes = baos.toByteArray();
FileUtils.readFileToByteArray()
このようなものは、@ Andrew Borisov(+1)によって言及されているように、多くのパッケージに実装されています。
編集
あなたの場合の遅い理由は、あなたが非常に巨大な配列を作成しているという事実にあると思います。本当に必要ですか?デザインを考え直してみてください。このファイルを配列に読み込む必要はなく、データを段階的に処理できると思います。