我剛剛被問到一個面試問題,該問題用於處理從CSV文件中讀取和總結某些單元格中的條目。當被要求優化它時,如果我們得到一個大小爲CSV的大小爲100的演唱會,我無法回答如何處理內存不足的情況。從文件中讀取內存不足
在Java中,如何從文件中讀取工作?我們如何知道什麼時候太大?我們如何處理?我被告知可以傳遞中間讀者對象而不是嘗試讀取整個事物?
我剛剛被問到一個面試問題,該問題用於處理從CSV文件中讀取和總結某些單元格中的條目。當被要求優化它時,如果我們得到一個大小爲CSV的大小爲100的演唱會,我無法回答如何處理內存不足的情況。從文件中讀取內存不足
在Java中,如何從文件中讀取工作?我們如何知道什麼時候太大?我們如何處理?我被告知可以傳遞中間讀者對象而不是嘗試讀取整個事物?
有幾種方法從Java中讀取文件,其中一些涉及保持所有內存中的文件的行(或數據)當你「讀」由類似換行符(例如逐行閱讀)分隔的數據時。
對於想要一次處理較小位的較大文件,使用Scanner
類(或類似的方法一次讀取特定字節)。
示例代碼:
FileInputStream inputStream = new FileInputStream(path);
Scanner sc = new Scanner(inputStream, "UTF-8");
while (sc.hasNextLine()) {
String line = sc.nextLine();
// System.out.println(line);
}
您可以使用RandomAccessFile
讀取文件。它可能不是最好的解決方案。
一次處理一行。 – EJP
你可以做一些類似於[this](http://stackoverflow.com/a/309718/940217)的東西,除了附加到StringBuilder之外,還可以當場進行求和計算。試圖將整個輸入文件存儲在內存中會造成麻煩。 –