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

  • 相关阅读:
    Android view显示在软键盘上方
    ListView子项点击无反应的解决办法
    adb for mac
    Android文件的流操作工具类
    Linux之间配置SSH互信(SSH免密码登录)
    最简单的Linux虚拟机磁盘扩容方法
    Grunt + Bower—前端构建利器
    Microsoft Office 2016 简体中文 Vol 版镜像下载(Pro Plus、Visio、Project 下载)
    如何在windows下安装GIT
    如何在Crystal框架项目中内置启动MetaQ服务?
  • 原文地址:https://www.cnblogs.com/xiayahui/p/4577248.html
Copyright © 2020-2023  润新知