zoukankan      html  css  js  c++  java
  • 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("
    ");
     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("
    ");
    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("
    ");
    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("
    ");
    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提高效率。

  • 相关阅读:
    (mysql)卸载5.0安装6.05出现“Error Nr. 2003 : Can't connect to MySQL server on 'localhost' (10061). ”的解决办法
    (Redundancy)关于服务器冗余的几个疑问,请知道的帮忙解答.
    (C#)XML文件操作3
    POJ 3635 Full Tank(最短路径变形 + 优先队列)
    POJ 2286 The Rotation Game(DFS + 迭代加深)
    POJ 1141 Brackets Sequence(区间DP + 打印路径)
    POJ 3460 Booksort(IDA* + 估价函数设计)
    POJ 2908 Quantum(BFS + 优先队列)
    NOI 1997 积木游戏(解题报告)
    NYOJ 110 决斗(区间DP + 黑书例题)
  • 原文地址:https://www.cnblogs.com/xiayahui/p/4577248.html
Copyright © 2011-2022 走看看