0
我需要从700MB文件中读取几个字节(比如1 MB,2 MB ...)。试图从一个大的文本文件中读取一些字节java
我尝试了几种方法,但在他们每个人我得到:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我尝试使用JDK 8流:
try (Stream<String> lines = Files.lines(Paths.get("myfilename"),
Charset.defaultCharset())) {
lines.forEachOrdered(line -> doSomething(line));
}
,并使用InputStream
/OutputStream
:
InputStream is = new FileInputStream("myfilename");
ByteArrayOutputStream result = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) != -1) {
result.write(buffer, 0, length);
}
is.close();
return result.toString("UTF-8");
有什么我失踪? 谢谢!
是的,它是二进制文件。所以这就是问题......我如何阅读它的一部分?
这就是有点奇怪。而且你确定没有其他代码围绕着,你没有向我们展示试图一次打开整个文件?最坏的情况:尝试使用探查器来了解你的记忆在哪里... – GhostCat
你想要达到什么目的?在这里你得到一个OOME,因为你显然将整个文件加载到内存中,而这个内存不适合分配给你的JVM的内存。 –
你有没有机会读取二进制文件?延迟的Files.lines()只能用于文本文件,因为一行的结尾由平台特定的行分隔符决定。如果试图以这种方式加载二进制文件,它可能会读取所有字节,直到第一个行尾序列,如果它存在的话(只要不发生字符集转换错误)。因此它可能会在第一行中抛出OoME。 – charlie