gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 01:28:34 26 4
gpt4 key购买 nike

我正在尝试编写一个按位读取文件的阅读器,但我在处理大文件时遇到了问题。我尝试读取 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 毫秒)并且几乎不使用任何堆。顺便说一句,文件必须小于 2 GB。

关于java - Byte[] 和 java.lang.OutOfMemoryError 逐位读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9505025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com