比较一下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编程领域,文本文件加密是一项重要的安全技术,它用于保护数据不被未经授权的用户访问。这个程序为初学者提供了一个良好的起点,了解如何在Java中实现文件的加密过程。以下将详细介绍Java实现文本文件加密的...
在这个案例中,我们可以利用`FileOutputStream`的`write()`方法来逐字节写入数据,而`BufferedWriter`可以用来提高性能,因为它允许我们一次性写入多个字符,而不是每次只写一个。 在写入过程中,我们需要跟踪已...
在Java中,如果需要从文本文件中删除特定行,实际上并没有直接提供这样的方法。通常的做法是先将文件中的所有内容读取到内存中,然后根据需要过滤掉不需要的行,最后再将处理后的结果写回原文件或者新的文件中。下面...
在Java编程语言中,读取和写入文本文件是常见的任务,这在处理数据、日志记录或构建用户界面时尤为关键。以下是一份详细的知识点解析,将帮助你理解和应用Java中的文件读写操作。 1. **Java I/O 基础** Java 提供...
在这个场景下,"java把文本文件内容导入到数据库"是一个典型的应用,它涉及到文本解析、数据库连接以及数据持久化等关键知识点。 首先,我们需要理解文本文件的格式。描述中提到文件内容的字段由“,”分隔,这种...
在IT领域,文本编辑器是开发者们日常工作中不可或缺的工具,用于创建、查看和修改各种文本文件。本文将深入探讨一个由Java编程语言实现的实用文本编辑器,它模仿了Windows操作系统自带的经典记事本功能。 Java是一...
在Java编程中,读写文本文件(如`.txt`文件)是常见的操作,尤其是在处理配置文件时。配置文件通常以键值对(key-value pairs)的形式存储数据,便于程序访问和管理设置。以下是对这个主题的详细阐述: 1. **Java I...
- **FileReader** 和 **FileWriter** 类用于读写文本文件,它们以字符为单位进行操作,适合处理文本数据。 5. **缓冲流**: 为了提高效率,Java提供了带缓冲的流,如BufferedInputStream、BufferedOutputStream、...
通过理解并实践这些知识点,开发者可以熟练地在Java应用程序中进行文件操作,无论是简单的文本文件还是更复杂的二进制文件。在实际开发中,还需要考虑线程安全、性能优化以及错误恢复策略等因素,以提升代码的稳定性...
### Java读取超大文本文件的关键技术点 在处理大数据量的文本文件时,Java 提供了多种方式来实现高效、低内存占用的文件读取操作。本文将围绕标题“java读取超大文本文件”及其相关描述和部分代码片段进行深入解析...
在Java编程语言中,读取文本文件是常见的任务,尤其当需要处理大量数据或从文件导入数据到数据库时。本文将深入探讨Java中用于读取文本文件的主要函数和方法,以及如何将读取的数据写入数据库。 首先,我们来看Java...
### Java 中对文件的读写操作之比较 #### 引言 在Java中,文件的读写操作是一项基本且重要的功能。随着Java的发展,不同版本提供了多种方式来处理文件读写,这使得开发者可以根据实际需求选择最合适的方法。本文将...
在Java编程中,统计文本文件中字母出现的频率是一项常见的任务,这可以帮助我们理解文本的特性,例如在语言模型或信息检索系统中。这个任务的关键是读取文件内容,转换为字符数组,然后进行计数。以下是实现这个功能...
### Java IO学习基础之读写文本文件 #### 一、Java IO概述 Java IO(Input/Output)是Java中处理输入输出操作的核心包,它主要提供了文件读写、网络通信等基本功能。Java IO操作主要基于流的概念进行,分为字节流...
在Java编程语言中,处理文本文件是常见的任务之一。这个程序显然实现了一些基本的文件操作,如新建、打开、复制和剪切文本文件。以下是对这些功能的详细解释: 1. **新建文本文件**: 使用`java.io.File`类可以...
在Java中,你可以使用`FileInputStream`类来读取二进制文件,如图片或音频文件,而`BufferedReader`则适用于读取文本文件。以下是一个简单的文本文件读取示例: ```java import java.io.*; public class ReadFile ...
在实际开发过程中,我们经常需要处理各种类型的文件,包括XML、Word文档以及普通的文本文件(如TXT)。这些文件在读写过程中经常会遇到乱码问题,尤其是在涉及到不同编码格式的情况下。本文将详细介绍如何使用Java...
在实现这个过程中,Java提供了一些关键类和接口,如`FileReader`和`BufferedReader`用于读取文本文件,`PriorityQueue`用于构建霍夫曼树,`OutputStream`和`InputStream`用于文件的读写操作,以及`BitOutputStream`...
通过提供的代码文件`CompressTestMain.java`、`GzipUtils.java`和`ZipUtils.java`,我们可以推测作者可能构建了一个测试环境,比较了Gzip和Zip压缩算法在实际操作中的性能差异。 首先,让我们了解Gzip和Zip的基本...
在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...