`
cii001
  • 浏览: 23483 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

2009-12-11 15:42 java的三种写文件方法的效率性能比较

    博客分类:
  • java
 
阅读更多

最近对以前开发的一个通用数据迁移的软件进行优化。除了用JDK5.0的多线程技术进行的改进之外,也比较了一下java写文件的性能。

在 java写文件中,通常会使用FileOutputStream和FileWriter,FileWriter只能写文本文件。 FileOutputStream也经常结合BufferedOutputStream。因为实际应用中写文本文件的情况占了大多数。所以下面测试用不同的方式生成一个相同行数、大小相同的文件的三种不同方式。


import java.io.File;
import java.io.FileOutputStream;
import java.io.*;

public class FileTest {
public FileTest() {
}

public static void main(String[] args) {
FileOutputStream out = null;
FileOutputStream outSTr = null;
BufferedOutputStream Buff=null;
FileWriter fw = null;
int count=1000;//写文件行数
try {
out = new FileOutputStream(new File("C:/add.txt"));
long begin = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
out.write("测试java 文件操作\r\n".getBytes());
}
out.close();
long end = System.currentTimeMillis();
System.out.println("FileOutputStream执行耗时:" + (end - begin) + " 豪秒");

outSTr = new FileOutputStream(new File("C:/add0.txt"));
Buff=new BufferedOutputStream(outSTr);
long begin0 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
Buff.write("测试java 文件操作\r\n".getBytes());
}
Buff.flush();
Buff.close();
long end0 = System.currentTimeMillis();
System.out.println("BufferedOutputStream执行耗时:" + (end0 - begin0) + " 豪秒");


fw = new FileWriter("C:/add2.txt");
long begin3 = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
fw.write("测试java 文件操作\r\n");
}
fw.close();
long end3 = System.currentTimeMillis();
System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒");

} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
fw.close();
Buff.close();
outSTr.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}   



以下结果经过多次执行,取常出现的数据,由于只是简单比较,不做详细统计。

1.当count=1000的,即写文件1000行的时候,写出的文件大小为18.5KB:
FileOutputStream执行耗时:46 豪秒
BufferedOutputStream执行耗时:31 豪秒
FileWriter执行耗时:15 豪秒

2.当count=10000的,即写文件10000行的时候,写出的文件大小为185KB:
FileOutputStream执行耗时:188 豪秒
BufferedOutputStream执行耗时:32 豪秒
FileWriter执行耗时:16 豪秒

3.当count=100000的,即写文件100000行的时候,写出的文件大小为1856KB:
FileOutputStream执行耗时:1266 豪秒
BufferedOutputStream执行耗时:125 豪秒
FileWriter执行耗时:93 豪秒

4.当count=1000000的,即写文件1000000行的时候,写出的文件大小为18555KB:
FileOutputStream执行耗时:12063 豪秒
BufferedOutputStream执行耗时:1484 豪秒
FileWriter执行耗时:969 豪秒

由以上数据可以看到,如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的鲁棒性是很不好的。当写 1000000行的文件的时候,FileOutputStream比FileWriter要慢11094毫秒(11 秒),BufferedOutputStream比FileWriter慢515毫秒。

不要小看这几秒的时间。当操作的数据量很大的时候,这点性能的差距就会很大了。在通用数据迁移工具导出数据库2千万条记录生成sql脚本文件的时候,性能性能相差10分钟以上。

分享到:
评论

相关推荐

    高效Java数据访问组件Uncode-DAL全功能源码

    项目名称:Uncode-DAL - 高效Java数据访问组件 项目简介: Uncode-DAL是一个功能全面的Java数据访问层组件,它深度整合了MyBatis、Spring JDBC以及Hibernate等主流ORM框架,致力于为开发者提供一套简便、高效的数据...

    性能最好的Java文件上传组件

    基于cos的Java文件上传组件,性能很好

    Java中多种写文件方式的效率对比实验(图)

     近在考虑一个问题:“如果快速地向文件中写入数据”,java提供了多种文件写入的方式,效率上各有异同,基本上可以分为如下三大类:字节流输出、字符流输出、内存文件映射输出。前两种又可以分为带buffer及不带...

    Test-Driven-Java-Development-Second-Edition:测试驱动的Java开发–第二版,由Packt发行

    测试驱动开发(TDD)是一种开发方法,它依赖于测试优先过程,该过程强调在编写必要的代码之前先编写测试,然后重构代码以对其进行优化。建立时间最长的编程语言,是为了提高程序员的工作效率,代码的可维护性和性能...

    毕业设计网上书店jsp源码--ee-JavaSSM-:新星网上书店的设计与实现毕业论文+开题报告+JavaSSM源码+数据库文件

    智能化图书查询系统是典型的信息管理系统,本文系统地介绍了智能化图书查询系统开发所需要用到的技术,和设计中遇到的问题及解决方法以及提高当前应用程序的工作性能。利用各种面向对象的开发工具,首先在短时间内...

    java 解析XML性能对比分析Demo

    Java 解析XML性能分析Demo。包含了DOM解析,SAX解析, JDOM解析,DOM4J解析,JAXB解析例子。

    5Java性能优化五.zip

    JAVA程序能够使用JDBC的方式连接数据库。对数据库的调优能够分为三个部分: 在应用层对SQL语句进行优化; 对数据库进行优化。 对数据库软件进行优化。 在应用层优化数据库訪问。涉及大量的编程技巧。比方。当...

    Java版水果管理系统源码-Big-Data-Project:大数据项目

    Java版水果管理系统源码 Project about big data Hadoop 在这里面我将总结自己学习Hadoop ecosystem相关的一些知识,包括Google的“三架马车”的初略阅读。 整个搜索引擎分为三层,文件层(file,GFS),data model...

    基于Spring MVC与MyBatis的SSM框架Web系统源码转换实战

    项目概述:本项目采用Java为主要开发语言,整合了Spring MVC与MyBatis框架,实现了一套基于SSM框架的Web系统。...简而言之,本项目是一次成功的框架结构转换实践,不仅优化了系统架构,也提升了开发效率和系统性能。

    java8集合源码-sane-dbc:一种在Java中与RDBMS交互的理智方法

    sane-dbc提供了一种有效、高性能和健壮的方式来与 Java 中的 RDBMS 交互。 它基于 SQL 和 . 也就是说,你使用 SQL 和 RDBMS 系统的特定工具以最适合您的应用程序的方式与其交互 DB类将操作组合成更大的操作和程序,...

    Java中四种XML解析技术之不完全测试

    Java对于读取xml文件的方法有很多种,但是那种效率高,性能好,文件中对于当前流行的读取XML的方法有详细的介绍和性能、时间的对比。

    JAVA面试题最全集

    列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41.试举例说明一个典型的垃圾回收算法? 42.请用java写二叉树算法,实现添加数据形成二叉树...

    java-concurrency-in-practice:Brian Goetz的“实践中的Java并发性”一书中的注释和示例

    实践中的Java并发 Brian Goetz于2006年出版的《 Java并发实践》一书中的注释和示例。 勘误表: : 前言 第一章:简介 操作系统经过改进,可以一次运行多个程序,并在进程中运行各个程序:操作系统由OS为其分配资源...

    java 面试题 总结

    Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor. 27、String s = new String("xyz");创建了几个String Object? 两个 28、设计4个线程,其中两个线程每次对j增加1,另外两个线程...

    Java优化编程(第2版)

    1.2 java文件注释头 1.3 包的声明与引用 1.4 类与接口的声明 1.5 java源文件编排格式 代码行长度与折行规则 1.6 程序注释 1.7 变量的声明初始化与放置 1.7.1 变量声明 1.7.2 变量初始化 1.7.3 变量放置 1.8 java程序...

    java面试题

    DOM:处理大型文件时性能下降的非常厉害,适合对xml的随机访问 SAX:事件驱动型的xml解析方法,适合对xml的顺序访问 jsp常用动作? 答:jsp:include 引入一个文件 jsp:useBean 实例化JavaBean jsp:setProperty ...

    最新springboot摄影跟拍预定管理系统.zip

    基于Spring Boot的摄影跟拍预定管理系统是一个**高效且便捷的在线服务平台**,旨在简化和优化摄影服务行业的预约管理流程。...同时,对于摄影服务行业的企业来说,该系统也是提升服务质量和管理效率的理想选择。

    java、groovy、C#、Javascript性能比较

    java、groovy、C#、Javascript的运行效率到底如何? 通过实验比较,Javascript的运行效率解决java,看来基于javascript的html5前途远大。 C#的Release版的运行性能也相当高,和C++相差不大,值得推荐。 文件内部...

    高性能Java SSM框架学生信息管理系统源码

    该项目共包含1918个文件,具体分布为:JavaScript文件862个,CSS文件302个,Vue文件210个,SCSS文件186个,TypeScript文件166个,XML配置文件91个,Java源文件38个,HTML页面16个,Markdown文档14个,以及 IntelliJ ...

Global site tag (gtag.js) - Google Analytics