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提高效率。