質問: **java.io.Fileをbyte[]に変換する方法を探しています。** Java関連の書籍を見てみたのですが、一番良い方法が分かりませんでした。 どなたか、教えていただけませんか?
回答: Java7以降だったり、特に使用するライブラリーに制限が無いのであれば、他の回答者のみなさんの方法をおすすめします。 **ただし、いずれの場合でも、**`new byte[]`するときのサイズを無条件にファイルサイズと同じにしてしまうと、巨大ファイルのときにメモリー不足(`OutOfMemoryError`)になるので注意してください。 一番良い方法ではありませんが、サードパーティーのライブラリーが使えなくて、古いバージョンのJavaで使いたい、といった方のために、一例として`RandomAccessFile`を使った例を書いてみました。 パフォーマンスが良いかどうかはわかりませんが、比較的コンパクトに書けます。 ``` final File file = new File( ... ); final long fileSize = file.length(); // TODO ファイルサイズの上限チェック // 使って良いメモリーサイズを考慮してください // ファイルサイズがintの最大値を超えていたら1つのbyte[]には収まりません final int byteSize = (int) fileSize; byte[] bytes = new byte[byteSize]; try { RandomAccessFile raf = new RandomAccessFile(file, "r"); try { raf.readFully(bytes); } finally { raf.close(); } } catch (IOException e) { e.printStackTrace(); } ```