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提高效率。
时间: 2024-10-11 21:16:53