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