java关于StringBuffer和StringBuilder写入文件的效率问题
StringBuffer在存储字符的时候,是有上限的,一旦达到上线就会出错,自己在项目中遇到一个从数据库中查询数据,然后写入到本地文件中
,数据量大概有30万条,此时的效率十分的低。下面是大致的模拟该程序的代码,项目代码由于是银行的项目,就不贴出来了。看下大致的模拟代码
- public class lis {
- public static void main(String[] args) throws IOException {
- File file1 = new File("D:\\io\\out.txt");
- BufferedWriter bw = new BufferedWriter(new FileWriter(file1));
- StringBuffer buffer = new StringBuffer("S|1|S0180||||");
- buffer.append("\r\n");
- List subList = new ArrayList();
- List listid = new ArrayList();
- long s= System.currentTimeMillis();
- //防止大于1万条时出错,循环处理
- for (int i = 0; i < 60; i++) {
- for(int k=0; k<5000; k++){
- buffer.append("KKKKKKKKKKKKKKKKKKKKKKKKKK"+k);
- buffer.append("\r\n");
- }
- bw.write(buffer.toString());
- bw.flush();
- buffer = new StringBuffer();
- }
- long e= System.currentTimeMillis();
- System.out.println(e-s);
- bw.close();
- }
- }
用时 第24行输出结果为230~236之间。
下面把StringBuffer换成StringBuider
- package mosTest;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- public class lis {
- public static void main(String[] args) throws IOException {
- File file1 = new File("D:\\io\\out.txt");
- BufferedWriter bw = new BufferedWriter(new FileWriter(file1));
- //StringBuffer buffer = new StringBuffer("S|1|S0180||||");
- StringBuilder buffer = new StringBuilder("S|1|S0180||||");
- buffer.append("\r\n");
- List subList = new ArrayList();
- List listid = new ArrayList();
- long s= System.currentTimeMillis();
- //防止大于1万条时出错,循环处理
- for (int i = 0; i < 60; i++) {
- for(int k=0; k<5000; k++){
- buffer.append("KKKKKKKKKKKKKKKKKKKKKKKKKK"+k);
- buffer.append("\r\n");
- }
- bw.write(buffer.toString());
- bw.flush();
- //buffer = new StringBuffer();
- buffer = new StringBuilder();
- }
- long e= System.currentTimeMillis();
- System.out.println(e-s);
- bw.close();
- }
- }
用时 第24行输出结果为222~225之间。
通过结果可以看到,优化的效果很是明显,但是需要注意的是:
StringBuilder要比StringBuffer效率要高,如果是单线程不需要考虑同步问题,则可以使用StringBuilder提高效率。
java关于StringBuffer和StringBuilder写入文件的效率问题的更多相关文章
- Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File
java.lang 类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口: Serializable, Appendable, ...
- JAVA String,StringBuffer与StringBuilder的区别??
String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能 ...
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...
- 理解Java(StringBuffer和StringBuilder)
StringBuffer可实现同步,StringBuilder线程不安全. 翻译自Java API英文文档 本质 StringBuffer 和 StringBuilder 均表示一个可变字符序列 这个 ...
- Java String, StringBuffer和StringBuilder实例
1- 分层继承2- 可变和不可变的概念3- String3.1- 字符串是一个非常特殊的类3.2- String 字面值 vs. String对象3.3- String的方法3.3.1- length ...
- Java 中StringBuffer与StringBuilder区别(转)及String类的一些基本操作代码
String 字符串常量StringBuffer 字符串变量(线程安全) 多个线程访问时,不会产生问题(Synchronized)StringBuilder 字符串变量(非线程安全) 多个线程访问时 ...
- Java基础——StringBuffer和StringBuilder
本节讲述2个字符串容器的区别 StringBuffer和StringBuilder区别: 1.相同点 两者都是容器(可变的字符序列),都可以对字符串进行基本的“增删改查”操作. 2.不同点 Strin ...
- Java基础 StringBuffer、StringBuilder原理浅析
StringBuilder与StringBuffer作用就是用来处理字符串,但String类本身也具备很多方法可以用来处理字符串,那么为什么还要引入这两个类呢? 首先看下面的例子 public sta ...
- Java的StringBuffer和StringBuilder类
StringBuffer (字符串缓冲对象) 概念:用于表示可以修改的字符串,称为字符串缓冲对象 作用:使用运算符的字符串将自动创建字符串缓冲对象 例如: str1+str2的操作,实际上是把str1 ...
随机推荐
- 《30天自制操作系统》02_day_学习笔记
helloos3: helloos.nas的解释在P29中 接下来课本讲了一些汇编语言的知识,便于理解这个汇编文件helloos4: 讲解在P41 helloos.nas后半部分去掉就成了ipl.as ...
- 如果类的属性是copy的NSString类型 用set方法拦截时
@property (nonatomic, copy) NSString *badgeValue; - (void)setBadgeValue:(NSString *)badgeValue { _ba ...
- Regist
using (RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Windows\Current ...
- C++之路进阶——bzoj3524(Couriers)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser gryz2016 Logout 捐赠本站 Notice:由于本OJ ...
- Node.js Express 获取request原始数据
app.use(bodyParser.json());客户端请求接口时如果指名请求头类型 为Content-Type=application/jsonbodyParser 会自动将 body 里的 j ...
- bzoj4137 [FJOI2015]火星商店问题
比较容易想到的做法是线段树套字典树,修改操作时在字典树上经过的节点维护一个最近被访问过的时间,这样询问操作只经过满足时间条件的节点,时间复杂度O(NlogN^2)但是因为线段树每个节点都要套个字典树, ...
- docker 批量删除容器
docker rm `docker ps -a |awk '{print $1}' | grep [0-9a-z]`
- linux c
#include <stdio.h>#include <string.h>#include <strings.h> int main(){ char buf[ ...
- mybatis的xml中特殊转义字符和模糊查询like的写法
做个备忘: xml特殊符号转义写法 < < > > <> <> & & &ap ...
- Mysql存储过程总结
1. 关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.好在MySQL 5.0终于开始已经支持存储过 ...