`
林秋枫
  • 浏览: 49947 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

比较一下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分钟以上。
    下次有时间再写单线程和多线程对性能的影响。

分享到:
评论
4 楼 huangyy 2008-03-31  
我也觉得不准,你可以把这几种写入顺序调整一下,结果可能会不一样了
3 楼 simohayha 2008-03-31  
如果用nio的话,性能会更好..
2 楼 anry513 2008-03-31  
这个测试不准!
1 楼 domando 2008-03-25  
多多感谢!!!

相关推荐

    java写的文本文件加密

    在Java编程领域,文本文件加密是一项重要的安全技术,它用于保护数据不被未经授权的用户访问。这个程序为初学者提供了一个良好的起点,了解如何在Java中实现文件的加密过程。以下将详细介绍Java实现文本文件加密的...

    java写文件固定大小为2G

    在这个案例中,我们可以利用`FileOutputStream`的`write()`方法来逐字节写入数据,而`BufferedWriter`可以用来提高性能,因为它允许我们一次性写入多个字符,而不是每次只写一个。 在写入过程中,我们需要跟踪已...

    java 删除某行和读写txt文件

    在Java中,如果需要从文本文件中删除特定行,实际上并没有直接提供这样的方法。通常的做法是先将文件中的所有内容读取到内存中,然后根据需要过滤掉不需要的行,最后再将处理后的结果写回原文件或者新的文件中。下面...

    Java读写文本文件的示例代码.7z

    在Java编程语言中,读取和写入文本文件是常见的任务,这在处理数据、日志记录或构建用户界面时尤为关键。以下是一份详细的知识点解析,将帮助你理解和应用Java中的文件读写操作。 1. **Java I/O 基础** Java 提供...

    java把文本文件内容导入到数据库

    在这个场景下,"java把文本文件内容导入到数据库"是一个典型的应用,它涉及到文本解析、数据库连接以及数据持久化等关键知识点。 首先,我们需要理解文本文件的格式。描述中提到文件内容的字段由“,”分隔,这种...

    文本编辑器(java写的实用小程序)

    在IT领域,文本编辑器是开发者们日常工作中不可或缺的工具,用于创建、查看和修改各种文本文件。本文将深入探讨一个由Java编程语言实现的实用文本编辑器,它模仿了Windows操作系统自带的经典记事本功能。 Java是一...

    Java读写.txt文件

    在Java编程中,读写文本文件(如`.txt`文件)是常见的操作,尤其是在处理配置文件时。配置文件通常以键值对(key-value pairs)的形式存储数据,便于程序访问和管理设置。以下是对这个主题的详细阐述: 1. **Java I...

    Java读写文件API的用法指南,性能分析与对比。

    - **FileReader** 和 **FileWriter** 类用于读写文本文件,它们以字符为单位进行操作,适合处理文本数据。 5. **缓冲流**: 为了提高效率,Java提供了带缓冲的流,如BufferedInputStream、BufferedOutputStream、...

    用java写的本地文件操作

    通过理解并实践这些知识点,开发者可以熟练地在Java应用程序中进行文件操作,无论是简单的文本文件还是更复杂的二进制文件。在实际开发中,还需要考虑线程安全、性能优化以及错误恢复策略等因素,以提升代码的稳定性...

    java读取超大文本文件

    ### Java读取超大文本文件的关键技术点 在处理大数据量的文本文件时,Java 提供了多种方式来实现高效、低内存占用的文件读取操作。本文将围绕标题“java读取超大文本文件”及其相关描述和部分代码片段进行深入解析...

    Java读文本文件的函数

    在Java编程语言中,读取文本文件是常见的任务,尤其当需要处理大量数据或从文件导入数据到数据库时。本文将深入探讨Java中用于读取文本文件的主要函数和方法,以及如何将读取的数据写入数据库。 首先,我们来看Java...

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

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

    用JAVA语言统计文本文件中字母出现的频率

    在Java编程中,统计文本文件中字母出现的频率是一项常见的任务,这可以帮助我们理解文本的特性,例如在语言模型或信息检索系统中。这个任务的关键是读取文件内容,转换为字符数组,然后进行计数。以下是实现这个功能...

    Java IO学习基础之读写文本文件

    ### Java IO学习基础之读写文本文件 #### 一、Java IO概述 Java IO(Input/Output)是Java中处理输入输出操作的核心包,它主要提供了文件读写、网络通信等基本功能。Java IO操作主要基于流的概念进行,分为字节流...

    java 文本文件 支持新建,打开,复制,剪切...

    在Java编程语言中,处理文本文件是常见的任务之一。这个程序显然实现了一些基本的文件操作,如新建、打开、复制和剪切文本文件。以下是对这些功能的详细解释: 1. **新建文本文件**: 使用`java.io.File`类可以...

    读写文件操作demo-java

    在Java中,你可以使用`FileInputStream`类来读取二进制文件,如图片或音频文件,而`BufferedReader`则适用于读取文本文件。以下是一个简单的文本文件读取示例: ```java import java.io.*; public class ReadFile ...

    Java读写xml,word,xml文件(防乱码)

    在实际开发过程中,我们经常需要处理各种类型的文件,包括XML、Word文档以及普通的文本文件(如TXT)。这些文件在读写过程中经常会遇到乱码问题,尤其是在涉及到不同编码格式的情况下。本文将详细介绍如何使用Java...

    java实现霍夫曼树压缩文本文件和解压

    在实现这个过程中,Java提供了一些关键类和接口,如`FileReader`和`BufferedReader`用于读取文本文件,`PriorityQueue`用于构建霍夫曼树,`OutputStream`和`InputStream`用于文件的读写操作,以及`BitOutputStream`...

    java自带压缩方式的性能比较

    通过提供的代码文件`CompressTestMain.java`、`GzipUtils.java`和`ZipUtils.java`,我们可以推测作者可能构建了一个测试环境,比较了Gzip和Zip压缩算法在实际操作中的性能差异。 首先,让我们了解Gzip和Zip的基本...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

Global site tag (gtag.js) - Google Analytics