Byte []和java.lang.OutOfMemoryError读取文件

街头男孩:

我正在尝试编写一个按位读取文件的读取器,但是大文件有问题。我试图读取100 mb的文件,它花了3分钟多的时间,但是仍然有效。

但是,然后我尝试使用500 mb的文件,但它甚至没有启动。由于这一行:

byte[] fileBits = new byte[len];

现在,我正在寻找解决方案,但找不到任何解决方案。也许有人解决了它,可以分享一些代码,技巧或想法。

if (file.length() > Integer.MAX_VALUE) {
    throw new IllegalArgumentException("File is too large: " + file.length());
}

int len = (int) file.length();
FileInputStream inputStream = new FileInputStream(file);

try {
    byte[] fileBits = new byte[len];
    for (int pos = 0; pos < len;) {
        int n = inputStream.read(fileBits, pos, len - pos);
        if (n < 0) {
            throw new EOFException();
        }
        pos += n;
    }

inputStream.read(fileBits, 0, inputStream.available());
inputStream.close();
彼得·劳瑞:

我建议您尝试使用内存映射。

FileChannel fc = new FileInputStream(file).getChannel();
MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_ONLY, 0, (int) fc.size());

这将使整个文件几乎立即可用(大约10毫秒),并且几乎没有堆使用。BTW文件必须小于2 GB。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java 在读取文件但同时使用流时避免 java.lang.OutOfMemoryError

读取大文件错误“ outofmemoryerror”(java)

Scala.Byte与java.lang.Byte-建议使用哪个?

java.lang.OutOfMemoryError:大型Excel文件的Java堆空间

加密/解密大文件时出现java.lang.OutOfMemoryError

Android java.lang.nullpointerexception读取文件

从Excel文件读取java.lang.ArrayIndexOutOfBoundsException

byte []以Java文件格式

将多个 byte[] 写入和读取到文件 C#

java.lang.OutOfMemoryError:使用Apache POI读取excel时的Java堆空间

java.lang.OutOfMemoryError:Android

捕获java.lang.OutOfMemoryError?

Android java.lang.OutOfMemoryError?

java.lang.OutOfMemoryError图片

错误是java.lang.OutOfMemoryError

java.lang.OutOfMemoryError: [内存耗尽] 从 Sqlite Android 读取数据时

打开jsp页面时的java.lang.OutOfMemoryError(PermGen空间)和java.lang.ClassNotFoundException

Apache spark Row getAs [String]:java.lang.Byte无法转换为java.lang.String

Java instanceof和byte []

Pyspark-java.lang.OutOfMemoryError:写入csv文件时的Java堆空间

java.lang.OutOfMemoryError:从URL下载大文件时的Java堆空间

文件到Java中的byte []

Java:.class文件和java.lang.Class

读取文件输入时出现java.lang.NumberFormatException

java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:Java堆空间

java.lang.OutOfMemoryError:Java堆空间?

EDF文件解析时Android应用程序运行到java.lang.OutOfMemoryError

在下载 1GB 文件时,JMeter 中未捕获的异常 java.lang.OutOfMemoryError