java關於StringBuffer和StringBuilder寫入文件的效率問題


   StringBuffer在存儲字符的時候,是有上限的,一旦達到上線就會出錯,自己在項目中遇到一個從數據庫中查詢數據,然后寫入到本地文件中

,數據量大概有30萬條,此時的效率十分的低。下面是大致的模擬該程序的代碼,項目代碼由於是銀行的項目,就不貼出來了。看下大致的模擬代碼

 1 public class lis {
 2 
 3     public static void main(String[] args) throws IOException {
 4         File file1 = new File("D:\\io\\out.txt");
 5         BufferedWriter bw = new BufferedWriter(new FileWriter(file1));
 6         StringBuffer buffer = new StringBuffer("S|1|S0180||||");
 7 
 8         buffer.append("\r\n");
 9 
10         List subList = new ArrayList();
11         List listid = new ArrayList();
12         long s= System.currentTimeMillis();
13         //防止大於1萬條時出錯,循環處理
14         for (int i = 0; i < 60; i++) {
15             for(int k=0; k<5000; k++){
16                 buffer.append("KKKKKKKKKKKKKKKKKKKKKKKKKK"+k);
17                 buffer.append("\r\n");
18             }
19             bw.write(buffer.toString());
20             bw.flush();
21             buffer = new StringBuffer();
22         }
23         long e= System.currentTimeMillis();
24         System.out.println(e-s);
25         bw.close();
26     }
27 }

用時 第24行輸出結果為230~236之間。
下面把StringBuffer換成StringBuider

 1 package mosTest;
 2 
 3 import java.io.BufferedWriter;
 4 import java.io.File;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.text.SimpleDateFormat;
 8 import java.util.ArrayList;
 9 import java.util.Date;
10 import java.util.List;
11 
12 
13 
14 public class lis {
15 
16     public static void main(String[] args) throws IOException {
17         File file1 = new File("D:\\io\\out.txt");
18         BufferedWriter bw = new BufferedWriter(new FileWriter(file1));
19         //StringBuffer buffer = new StringBuffer("S|1|S0180||||");
20         StringBuilder buffer = new StringBuilder("S|1|S0180||||");
21 
22         buffer.append("\r\n");
23 
24         List subList = new ArrayList();
25         List listid = new ArrayList();
26         long s= System.currentTimeMillis();
27         //防止大於1萬條時出錯,循環處理
28         for (int i = 0; i < 60; i++) {
29             for(int k=0; k<5000; k++){
30                 buffer.append("KKKKKKKKKKKKKKKKKKKKKKKKKK"+k);
31                 buffer.append("\r\n");
32             }
33             bw.write(buffer.toString());
34             bw.flush();
35             //buffer = new StringBuffer();
36             buffer = new StringBuilder();
37         }
38         long e= System.currentTimeMillis();
39         System.out.println(e-s);
40         bw.close();
41     }
42 }

  用時 第24行輸出結果為222~225之間。

  通過結果可以看到,優化的效果很是明顯,但是需要注意的是:

  StringBuilder要比StringBuffer效率要高,如果是單線程不需要考慮同步問題,則可以使用StringBuilder提高效率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM