2015-10-06 120 views
0

我剛剛被問到一個面試問題,該問題用於處理從CSV文件中讀取和總結某些單元格中的條目。當被要求優化它時,如果我們得到一個大小爲CSV的大小爲100的演唱會,我無法回答如何處理內存不足的情況。從文件中讀取內存不足

在Java中,如何從文件中讀取工作?我們如何知道什麼時候太大?我們如何處理?我被告知可以傳遞中間讀者對象而不是嘗試讀取整個事物?

+3

一次處理一行。 – EJP

+0

你可以做一些類似於[this](http://stackoverflow.com/a/309718/940217)的東西,除了附加到StringBuilder之外,還可以當場進行求和計算。試圖將整個輸入文件存儲在內存中會造成麻煩。 –

回答

2

面試官給了你一個提示 - BufferedReader。它是逐行讀取大文件的有效選擇。

小例子:

String line; 
BufferedReader br = new BufferedReader("c:/test.txt"); 
while ((line= br.readLine()) != null) { 
    //do processing 
} 
br.close(); 

Here是文檔

+0

這裏你不需要初始化'line'。 – EJP

+0

@EJP Ofcourse。謝謝 :) – sam

0

有幾種方法從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); 
} 
-1

您可以使用RandomAccessFile讀取文件。它可能不是最好的解決方案。