2011-09-20 243 views
0

本文提供有關閱讀文本文件的提示。但我首先要讀the whole file。然後我想通過new String(bytes, "UTF-8")創建一個字符串。但是我需要大量的內存來完成這個操作。如何將字節轉換爲字符串和字節釋放的並行處理。我的意思是當一個新的字符串符號從字節出現在內存中時,這個字節被釋放。文本文件閱讀

回答

0

您無法一次有效地構建一個字符串。

我認爲你能做的最好的是這樣的:

String str = null; 
    BufferedReader r = new BufferedReader(new FileReader("filename", "UTF-8")); 
    try { 
     StringBuilder sb = 
      new StringBuilder(/* approx size of file in CHARACTERS */); 
     int ch; 
     while ((ch = r.read()) != -1) { 
      sb.append((char) ch); 
     } 
     str = sb.toString(); 
    } finally { 
     r.close(); 
    } 

只要你的文件大小的估計是很好的(!不小於實際尺寸),這不會使用比絕對必要的更多的空間。問題是操作系統報告的文件大小將以字節大小而不是字符爲單位,並且像UTF-8這樣的編碼方案在兩種大小之間沒有簡單的關係。

1

在執行的FileInputStream方法read的多個呼叫與待讀取每個呼叫字節所需量:

public int read(byte[] b, 
       int off, 
       int len) 

的創建LEN的塊的新字符串字節讀出。 然後連接字符串。

無論如何,這無助於節省大量的內存。