将文件内容读/写到ArrayList <byte>中

时间:2015-05-24 01:28:17

标签: java file arraylist

我需要将一个非常大的文件(1.11gb)读入内存并以字节为单位进行处理。我这样做的唯一方法是使用ArrayList(我不能使用byte []因为它会超出限制)。 没有办法让文件更小(我用它作为测试来测试程序处理数据的时间)。 然后我需要将一个ArrayList作为文件放回到硬盘驱动器上(仍然是1.11gb) 我不像在读书那样担心写作。 速度也是至关重要的,所以要避免分段,除非那里的任何人都有快速的方法。

1 个答案:

答案 0 :(得分:3)

你试图以错误的方式解决这个问题(并且它不会工作 1 )。

解决此问题的可能方法是:

  • 重新设计算法,以便它不需要将整个文件一次性读入内存......

  • 将数据读入多个byte[]个对象以绕过2^31数组大小限制。

  • 使用多个ByteBuffer个对象 2 映射文件;见Java MemoryMapping big files

1 - 它不起作用,因为ArrayList内部有Object[],因此受到与字节数组相同的限制。此外,ArrayList<Byte>将占用表示相同字节数的byte[]的4到8倍的内存。或者更多,如果您使用ArrayList<Byte>对象填充Byte以错误的方式实例化。

2 - Buffer API全部使用int尺寸和偏移,而(AFAIK)不支持将文件&gt; = 2 ^ 31个字节映射到单个{{1} }。

相关问题