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. public class lis {
  13.  
  14. public static void main(String[] args) throws IOException {
  15. File file1 = new File("D:\\io\\out.txt");
  16. BufferedWriter bw = new BufferedWriter(new FileWriter(file1));
  17. //StringBuffer buffer = new StringBuffer("S|1|S0180||||");
  18. StringBuilder buffer = new StringBuilder("S|1|S0180||||");
  19.  
  20. buffer.append("\r\n");
  21.  
  22. List subList = new ArrayList();
  23. List listid = new ArrayList();
  24. long s= System.currentTimeMillis();
  25. //防止大于1万条时出错,循环处理
  26. for (int i = 0; i < 60; i++) {
  27. for(int k=0; k<5000; k++){
  28. buffer.append("KKKKKKKKKKKKKKKKKKKKKKKKKK"+k);
  29. buffer.append("\r\n");
  30. }
  31. bw.write(buffer.toString());
  32. bw.flush();
  33. //buffer = new StringBuffer();
  34. buffer = new StringBuilder();
  35. }
  36. long e= System.currentTimeMillis();
  37. System.out.println(e-s);
  38. bw.close();
  39. }
  40. }

  用时 第24行输出结果为222~225之间。

  通过结果可以看到,优化的效果很是明显,但是需要注意的是:

  StringBuilder要比StringBuffer效率要高,如果是单线程不需要考虑同步问题,则可以使用StringBuilder提高效率。

java关于StringBuffer和StringBuilder写入文件的效率问题的更多相关文章

  1. Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File

    java.lang 类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口: Serializable, Appendable, ...

  2. JAVA String,StringBuffer与StringBuilder的区别??

    String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...

  3. 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接

    长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...

  4. 理解Java(StringBuffer和StringBuilder)

    StringBuffer可实现同步,StringBuilder线程不安全. 翻译自Java API英文文档 本质 StringBuffer 和 StringBuilder 均表示一个可变字符序列 这个 ...

  5. Java String, StringBuffer和StringBuilder实例

    1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...

  6. Java 中StringBuffer与StringBuilder区别(转)及String类的一些基本操作代码

    String 字符串常量StringBuffer 字符串变量(线程安全)  多个线程访问时,不会产生问题(Synchronized)StringBuilder 字符串变量(非线程安全) 多个线程访问时 ...

  7. Java基础——StringBuffer和StringBuilder

    本节讲述2个字符串容器的区别 StringBuffer和StringBuilder区别: 1.相同点 两者都是容器(可变的字符序列),都可以对字符串进行基本的“增删改查”操作. 2.不同点 Strin ...

  8. Java基础 StringBuffer、StringBuilder原理浅析

    StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 首先看下面的例子 public sta ...

  9. Java的StringBuffer和StringBuilder类

    StringBuffer (字符串缓冲对象) 概念:用于表示可以修改的字符串,称为字符串缓冲对象 作用:使用运算符的字符串将自动创建字符串缓冲对象 例如: str1+str2的操作,实际上是把str1 ...

随机推荐

  1. 《30天自制操作系统》02_day_学习笔记

    helloos3: helloos.nas的解释在P29中 接下来课本讲了一些汇编语言的知识,便于理解这个汇编文件helloos4: 讲解在P41 helloos.nas后半部分去掉就成了ipl.as ...

  2. 如果类的属性是copy的NSString类型 用set方法拦截时

    @property (nonatomic, copy) NSString *badgeValue; - (void)setBadgeValue:(NSString *)badgeValue { _ba ...

  3. Regist

    using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\Current ...

  4. C++之路进阶——bzoj3524(Couriers)

    F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  gryz2016 Logout 捐赠本站 Notice:由于本OJ ...

  5. Node.js Express 获取request原始数据

    app.use(bodyParser.json());客户端请求接口时如果指名请求头类型 为Content-Type=application/jsonbodyParser 会自动将 body 里的 j ...

  6. bzoj4137 [FJOI2015]火星商店问题

    比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度O(NlogN^2)但是因为线段树每个节点都要套个字典树, ...

  7. docker 批量删除容器

     docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]`

  8. linux c

    #include <stdio.h>#include <string.h>#include <strings.h> int main(){    char buf[ ...

  9. mybatis的xml中特殊转义字符和模糊查询like的写法

    做个备忘: xml特殊符号转义写法 <          < >          > <>   <> &      & &ap ...

  10. Mysql存储过程总结

    1.     关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.好在MySQL 5.0终于开始已经支持存储过 ...