我需要将文件读入字节数组。整个文件需要读入数组。问题是我收到 OutOfMemory 错误,因为文件大小太大。增加-XmX似乎没有任何效果。这是代码片段:
InputStream in = new FileInputStream(file);
long length = file.length();
byte[] out = new byte[(int)length];
// Process the byte array
问题发生在字节数组实例期间。是否有内存消耗较少的解决方法来解决此问题?
最佳答案
使用此方法时,您需要拥有比最大文件多得多的可用内存。鉴于一台 24 GB 的机器成本不到 2000 英镑,这个想法不再像以前那么愚蠢了。实际上,在某些情况下,一个 byte[] 的 2GB 限制更让人头疼。
但是,读取 InputStream 的常用方法是一次读取一个 8KB 的 block 。这样您只需拥有远超过 8KB 的可用空间。
顺便说一句:您可以使用 -mx1g 而不是您正在使用的选项。
关于java - Java中InputStream的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4826764/