【发布时间】:2013-09-01 18:17:51
【问题描述】:
我是 Java 新手,正在阅读非常大的文件,需要一些帮助来理解和解决问题。我们有一些遗留代码必须进行优化才能使其正常运行。文件大小可以从 10mb 到 10gb 不等。只有当文件开始超过 800mb 大小时才会出现问题。
InputStream inFileReader = channelSFtp.get(path); // file reading from ssh.
byte[] localbuffer = new byte[2048];
ByteArrayOutputStream bArrStream = new ByteArrayOutputStream();
int i = 0;
while (-1 != (i = inFileReader.read(buffer))) {
bArrStream.write(localbuffer, 0, i);
}
byte[] data = bArrStream.toByteArray();
inFileReader.close();
bos.close();
我们得到了错误
java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2271)
at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
任何帮助将不胜感激?
【问题讨论】:
-
在您提到的示例代码中,您只是将整个文件加载到
ByteArrayOutputStream中。用例是什么?真的需要byte[]中的整个文件数据吗? -
你能告诉我你打算使用哪个 JDK 版本吗,我对 JDK 8 和 JDK7 或更低版本有不同的解决方案。
-
@Luffy 在不知道为什么这么多数据被读入内存的情况下回答这个问题有意义吗?
-
以下任何答案是否有助于解决您的问题?如果它有帮助,请接受它以帮助有类似问题的人。如果没有帮助,请告诉我,以便我删除我的,以免人们浪费时间查看它。
标签: java arrays file-io out-of-memory bytearray