標籤:
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提高效率。
java關於StringBuffer和StringBuilder寫入檔案的效率問題