`
cii001
  • 浏览: 24087 次
  • 性别: 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分钟以上。

分享到:
评论

相关推荐

    fastdfs-client-java-1.27-SNAPSHOT.zip

    总的来说,Fastdfs-client-java-1.27-SNAPSHOT是Java开发者接入FastDFS系统的重要工具,通过其提供的API,可以轻松地在Java应用中实现对FastDFS的文件操作,提升文件服务的稳定性和效率。对于大型的、以文件为中心的...

    dbf-jdbc-wisecoders,JAVA 读写DBF文件工具包

    DBF文件是dBase系列数据库管理系统中使用的一种文件格式,广泛应用于早期的桌面数据库应用中。随着技术的发展,虽然现在更多的数据库系统倾向于使用SQL标准的数据库格式,但在处理某些历史数据或者与旧系统交互时,...

    java代码效率优化

    以上就是基于给定文件内容总结出的Java代码效率优化方法。通过这些策略的应用,可以有效地提高Java应用程序的性能,减少资源消耗。在实际开发中,开发者应当根据具体情况灵活选择合适的优化方法,以达到最佳效果。

    mysql-connector-java-5.1.35 MySQL的jdbc驱动jar

    MySQL的JDBC驱动,全称为Java Database Connectivity driver,是用于在Java应用程序中连接MySQL数据库的重要组件。`mysql-connector-java-5.1.35`是MySQL官方提供的一个特定版本的JDBC驱动程序,适用于Java环境,...

    javacv-platform-1.5.3-bin.zip

    JavaCV(Java Computer Vision)是一个基于Java的计算机视觉库,它为Java开发者提供了一套方便的接口和工具,使得他们能够更容易地访问和利用OpenCV、FFmpeg等库。JavaCV平台1.5.3版本的发布,为开发者带来了最新的...

    java-sizeof-0.0.4:一个查看java对象占用内存大小

    Java 是一种广泛使用的编程语言,以其跨平台的特性、丰富的类库和强大的性能著称。在Java中,理解和管理内存是优化程序性能的关键因素之一。本文将深入探讨Java中的对象内存占用,以及如何使用"java-sizeof-0.0.4...

    java中基于socket的文件上传程序

    根据提供的文件标题、描述、标签以及部分内容,我们可以总结出以下关于“Java中基于Socket的文件上传程序”的相关知识点。 ### 一、基础知识介绍 #### 1. Socket编程基础 - **概念**:Socket(套接字)是网络通信...

    mysql-connector-java-8.0.24

    MySQL Connector/J 8.0.24 是MySQL数据库与Java应用程序之间的重要桥梁,它是一个用于连接Java应用程序到MySQL服务器的JDBC驱动程序。这个版本的发布旨在提供更高效、更稳定以及更安全的数据访问功能。以下是对这个...

    Large-File-Processing-master_javanio_java大文件处理_

    相比于传统的IO模型,NIO提供了一种更高效的方式来处理大文件,尤其在读写大量数据时,能够显著提高程序性能。本项目“Large-File-Processing-master_javanio_java大文件处理_”显然专注于通过Java NIO实现大文件...

    java多线程文件传输

    Java多线程文件传输是Java编程中一个重要的实践领域,特别是在大数据处理、网络通信和分布式系统中。在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨...

    mysql-connector-java-8.0.16.jar

    - **下载**:可以从MySQL官方网站或第三方源下载mysql-connector-java-8.0.16.jar文件。 - **添加至项目**:将jar文件添加到Java项目的类路径中,这可以通过IDE(如Eclipse、IntelliJ IDEA)的设置完成,或者在...

    关于java考试的要点

    根据提供的文件信息,我们可以整理出以下关于Java考试的要点及相关知识点: ### Java考试要点概览 #### 一、Java的历史与发展 - **起源**: Java语言最初由Sun Microsystems公司于1991年开始开发,最初命名为“Oak...

    Java各知识点详细总结

    - **性能优化**:通过即时编译器(JIT Compiler)等技术提高程序的运行效率。 #### 四、学习新技术的方法论 - **技术认知**:了解新技术的基本概念和应用场景。 - **特点分析**:研究新技术的特点及其适用场景,...

    graalvm-ce-java11-linux-amd64-21.0.0.2.tar.gz

    本文将围绕"graalvm-ce-java11-linux-amd64-21.0.0.2.tar.gz"这一特定版本,深入探讨GraalVM的核心特性、安装过程及使用方法。 一、GraalVM核心特性 1. 多语言支持:GraalVM不仅支持Java,还支持JavaScript、Ruby...

    MSS-JAVA编码规范

    - 变更03:内容和格式修改(2008-11-12) #### 四、目录结构 文档包含了以下章节: 1. 目的 2. 范围 3. 具体细则 - 文件名 - 文件组织 - 缩进排版 - 注释 - 声明 - 方法 - 语句 - 空白 - 命名规范 - ...

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

    "性能最好的Java文件上传组件"是指一种优化了上传速度和资源消耗的工具,它能够有效地处理大文件上传、多文件并发上传等问题,提高应用的用户体验。在这个场景中,我们提到了基于"COS"的Java文件上传组件。COS通常指...

    Java基础入门及提高.pdf

    - **附录D:性能**:探讨如何优化Java程序,提高其运行效率。 - **附录E:关于垃圾收集的一些话**:讲解Java内存管理和垃圾回收机制的工作原理。 - **附录F:推荐读物**:提供一些进一步学习的书籍和资源推荐。 ###...

    java文件读写操作

    在Java编程语言中,文件读写操作是程序与外部数据交互的基本能力。这篇学习笔记将带你初探这个领域,适合新手入门。我们将讨论如何使用Java进行文件的读取、写入以及一些常见的应用场景。 首先,Java提供了java.io...

    Java 中对文件的读写操作之比较

    ### Java 中对文件的读写操作之比较 #### 引言 在Java中,文件的读写操作是一项基本且重要的功能。随着Java的发展,不同版本提供了多种方式来处理文件读写,这使得开发者可以根据实际需求选择最合适的方法。本文将...

    七牛java-sdk及其他所需jar包

    【七牛Java SDK及其他所需JAR包】是一个包含多个关键组件的压缩文件,这些组件主要用于在Java环境中与七牛云存储平台进行交互。七牛云存储是一家提供云端数据存储和分发服务的公司,广泛应用于图片、视频处理以及...

Global site tag (gtag.js) - Google Analytics