【发布时间】:2017-10-02 14:10:14
【问题描述】:
这个问题很短。 我有一个大小为 4GB 的文件,目前我确实使用以下代码阅读它:
public class Main {
public static void main(String[] args) {
byte[] content = null;
try {
content = Files.readAllBytes(Paths.get("/path/to/file.ext"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(content);
}
}
这是输出:
Exception in thread "main" java.lang.OutOfMemoryError: Required array size too large
at java.nio.file.Files.readAllBytes(Unknown Source)
at Main.main(Main.java:13)
有没有一种方法可以毫无例外地读取数组(流等)? 该文件小于允许的 HEAP,因此应该可以在程序中一次存储所有数据。
【问题讨论】:
-
content 是一个大小有限的数组,你正在溢出......
-
我知道但是我应该如何阅读内容呢?
-
你会流式传输它。读取一点数据,用它做你需要的,读取下一点等
-
我需要在一个变量(数组或数据类型)中收集全部内容
-
在这种情况下,您将不得不手动执行此操作并拆分您的内容。例如。读取 MAX_BUFFER_SIZE,将其写入数组 1,创建第二个数组并将其余部分读取到该数组中
标签: java out-of-memory java-stream file-read