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

时间: 2024-10-11 21:16:53

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

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

java.lang 类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口: Serializable, Appendable, CharSequence public final class StringBufferextends Objectimplements Serializable, CharSequence 线程安全的可变字符序列.一个类似于 String 的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某

理解Java(StringBuffer和StringBuilder)

StringBuffer可实现同步,StringBuilder线程不安全. 翻译自Java API英文文档 本质 StringBuffer 和 StringBuilder 均表示一个可变字符序列 这个字符序列是一个类似 String 的字符串缓冲区,但能被修改 区别 当字符串缓冲区用于单线程环境时,采用 StringBuilder 若需要同步时,则使用 StringBuffer,因为 StringBuffer 是线程安全的 也就是说,StringBuilder 是 StringBuffer 在单

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

String 字符串常量StringBuffer 字符串变量(线程安全)  多个线程访问时,不会产生问题(Synchronized)StringBuilder 字符串变量(非线程安全) 多个线程访问时可能会产生问题 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不

JAVA String,StringBuffer与StringBuilder的区别??

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以

Java String, StringBuffer和StringBuilder实例

1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length()3.3.2- concat(String)3.3.3- indexOf(..)3.3.4- substring(..)3.3.5- replace3.3.6- 其它实例4- StringBuffer vs StringBuilder 1- 分层继承 当使用文本数据时,Java提供了三种类别,包括

Java基础——StringBuffer和StringBuilder

本节讲述2个字符串容器的区别 StringBuffer和StringBuilder区别: 1.相同点 两者都是容器(可变的字符序列),都可以对字符串进行基本的“增删改查”操作. 2.不同点 StringBuffer:JDK1.0出现,线程同步,操作比较耗时,但是安全: StringBuilder:JDK1.5出现,线程不同步,由于它不执行同步,所以速度较StringBuffer更快:不是安全的.

Java IO流 之 FileOutputStream 写入文件

http://www.verejava.com/?id=1699464804818 package com.io; import java.io.*; public class TestOutputStream { public static void main(String[] args) { OutputStream os=null; try { os=new FileOutputStream(new File("res/test.txt")); //向文件中写入数据 String

Java之StringBuffer和StringBuilder的差别与联系

2.StringBuilder,StringBuffer 字符串拼接时用这两个类,效率高.节约内存.假设用字符串 "+"号拼接 性能差.而且浪费空间,产生非常多垃圾 StringBuffer线程安全:StringBuilder线程不安全. StringBuilder 在多线程场景下性能比StringBuffer 要高

Java之StringBuffer和StringBuilder的区别与联系

2.StringBuilder,StringBuffer 字符串拼接时用这两个类,效率高,节约内存,如果用字符串 "+"号拼接 性能差,并且浪费空间,产生很多垃圾 StringBuffer线程安全:StringBuilder线程不安全. StringBuilder 在多线程场景下性能比StringBuffer 要高 版权声明:本文为博主原创文章,未经博主允许不得转载.