2015-06-12 78 views
2

對於學習文件讀取和寫入我寫了一個方法,其中我正在寫一些結果到文件中。 在運行該程序時,文件大小會進入GB,並且我必須停止它之間的程序,這並不是我期望的。 我不知道我在做什麼錯誤。 請您指出錯誤或更好的方式。文件的大小進入GB的寫入一些文本

public static void modOperation() { 
    int i = Integer.MAX_VALUE; 
    FileWriter fileWriter; 
    try { 
     fileWriter = new FileWriter("Mod.txt"); 
     while (i > 0) { 
      boolean result = ((i-- % 3) == 0); 
      fileWriter.write(" result :: " + result); 
     } 
     fileWriter.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+3

多大'Integer.MAX_VALUE'? –

+0

因此,'Integer.MAX_VALUE'是'2gb',並且假定每個字符只有1個字節,而你有16個字節(最大值),你可以做數學運算(這不包括管理OS的開銷文件和「假定」每個字符一個字節) – MadProgrammer

+0

按設計工作。你的問題? – EJP

回答

4

Integer.MAX_VALUE是2^31 - 1,其等於2,147,483,647。您正在編寫文本" result :: "並在每行上添加一個數字,大約爲20個字節。

2,147,483,647×20個字節= 42萬億字節

所以,你的代碼肯定會引起千兆字節(及以後)將被寫入。

更好的解決方案是給環路的上限是這樣的:

while (i < 100000) { 
    boolean result = ((i-- % 3) == 0); 
    fileWriter.write(" result :: " + result); 
}