それぞれ 100Kb の複数のバイト配列に分割したい巨大な POJO (1G - 6G) があります。現在、私のアルゴは次のとおりです。
- 大きなオブジェクトを大きなバイト[]にシリアル化します。つまり、1Gオブジェクトを1Gバイト[]にシリアル化します
- 大きい byte[] を小さい 100k byte[] に分割します
ただし、これにより、1 つのオブジェクト + 1 バイト [] + 約 100k バイト [] があるため、多くのメモリ プレッシャが作成されます。
大きなファイルを複数の小さなバイト配列に分割することは、次のように FileInputStream を使用して比較的簡単に行うことができます。
File file = new File("asd");
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
byte[] buffer = new byte[1024*1024*10];
int n = -1;
while((n = bis.read(buffer))!=-1) {
bos.write(buffer,0,n):
}
通常のPOJOで同じことを達成するにはどうすればよいですか? 大きなバイト配列を作成して分割するのではなく、オブジェクトを 100K バイト配列に繰り返し読み込む方法はありますか?