我将尝试编写一个按位读取文件的阅读器,但我在处理大型文件时遇到了问题。我尝试读取100mb大小的文件,需要超过3分钟才能完成读取,但是程序可以正常运行。
然而,当我尝试读取500mb大小的文件时,程序甚至无法启动。这是因为以下代码行:
然而,当我尝试读取500mb大小的文件时,程序甚至无法启动。这是因为以下代码行:
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();
OutOfMemoryError
吗?看看java -mx
。 - Miserable Variablebyte
数组会使用超过一个字节的索引吗? - mgibsonbr