百度

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

posted @ 2015-06-15 15:11  雪季28  阅读(5989)  评论(0编辑  收藏  举报
百度