java byte[]上限

javaのbyte[]でファイルのbyteデータを扱うことはよくあるが、byte[]で扱えないデータ数を扱う場合、どのような方法があるか検討しました。

実施するうえで、実行環境のスペックが大きくかかわっていると思われるので、掲載する(違ったらごめんなさい。自分は動けばいいと思ったので、詳しく調査は行わないです)。

やってみた

File inputFile = new File("./6gb.bin"); // ファイル
long splitSize1 = 1L * 1024 * 1024 * 1024; // 1GBのファイルサイズ

try( FileInputStream ins= new FileInputStream(inputFile);){			
    byte[][] bytes = new byte[7][]; //定義時にlist[]に容量を確保。

    byte[] readByte  = new byte[(int) splitSize1];
    int read;

    for(int i = 0; i < 7; i++) {
        while(( read = ins.read(readByte)) != -1) {
            bytes[i] = readByte;
            break;
        }
    }
    System.out.println(bytes.length); 
    //byte[] のサイズ:7
    for(byte[] item : bytes) {
        System.out.println(item.length); 
        //byte[i][] のサイズ:1073741824(1GB)*7回表示
    }

} catch (Exception e) {
    e.printStackTrace();
}

検証結果

上記を行った結果、計7GBのbyte[][]を扱うことができたが、メモリ割り当てを低くした場合でも、ヒープエラーなどの異常終了が見られなかったため、PCスペックにもよるのかなといった認識です。

参考文献

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です