最近对以前开发的一个通用数据迁移的软件进行优化。除了用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分钟以上。
- 浏览: 24531 次
- 性别:
- 来自: 上海
相关推荐
总的来说,Fastdfs-client-java-1.27-SNAPSHOT是Java开发者接入FastDFS系统的重要工具,通过其提供的API,可以轻松地在Java应用中实现对FastDFS的文件操作,提升文件服务的稳定性和效率。对于大型的、以文件为中心的...
DBF文件是dBase系列数据库管理系统中使用的一种文件格式,广泛应用于早期的桌面数据库应用中。随着技术的发展,虽然现在更多的数据库系统倾向于使用SQL标准的数据库格式,但在处理某些历史数据或者与旧系统交互时,...
以上就是基于给定文件内容总结出的Java代码效率优化方法。通过这些策略的应用,可以有效地提高Java应用程序的性能,减少资源消耗。在实际开发中,开发者应当根据具体情况灵活选择合适的优化方法,以达到最佳效果。
MySQL的JDBC驱动,全称为Java Database Connectivity driver,是用于在Java应用程序中连接MySQL数据库的重要组件。`mysql-connector-java-5.1.35`是MySQL官方提供的一个特定版本的JDBC驱动程序,适用于Java环境,...
Java 是一种广泛使用的编程语言,以其跨平台的特性、丰富的类库和强大的性能著称。在Java中,理解和管理内存是优化程序性能的关键因素之一。本文将深入探讨Java中的对象内存占用,以及如何使用"java-sizeof-0.0.4...
JavaCV(Java Computer Vision)是一个基于Java的计算机视觉库,它为Java开发者提供了一套方便的接口和工具,使得他们能够更容易地访问和利用OpenCV、FFmpeg等库。JavaCV平台1.5.3版本的发布,为开发者带来了最新的...
根据提供的文件标题、描述、标签以及部分内容,我们可以总结出以下关于“Java中基于Socket的文件上传程序”的相关知识点。 ### 一、基础知识介绍 #### 1. Socket编程基础 - **概念**:Socket(套接字)是网络通信...
相比于传统的IO模型,NIO提供了一种更高效的方式来处理大文件,尤其在读写大量数据时,能够显著提高程序性能。本项目“Large-File-Processing-master_javanio_java大文件处理_”显然专注于通过Java NIO实现大文件...
Java多线程文件传输是Java编程中一个重要的实践领域,特别是在大数据处理、网络通信和分布式系统中。在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨...
- **下载**:可以从MySQL官方网站或第三方源下载mysql-connector-java-8.0.16.jar文件。 - **添加至项目**:将jar文件添加到Java项目的类路径中,这可以通过IDE(如Eclipse、IntelliJ IDEA)的设置完成,或者在...
MySQL Connector/J 8.0.24 是MySQL数据库与Java应用程序之间的重要桥梁,它是一个用于连接Java应用程序到MySQL服务器的JDBC驱动程序。这个版本的发布旨在提供更高效、更稳定以及更安全的数据访问功能。以下是对这个...
根据提供的文件信息,我们可以整理出以下关于Java考试的要点及相关知识点: ### Java考试要点概览 #### 一、Java的历史与发展 - **起源**: Java语言最初由Sun Microsystems公司于1991年开始开发,最初命名为“Oak...
- **性能优化**:通过即时编译器(JIT Compiler)等技术提高程序的运行效率。 #### 四、学习新技术的方法论 - **技术认知**:了解新技术的基本概念和应用场景。 - **特点分析**:研究新技术的特点及其适用场景,...
在IT行业中,尤其是在大数据处理和报表生成时,这样的工具对于提高性能和效率至关重要。 Pentaho AggDesigner是Pentaho Data Integration(Kettle)的一部分,它是一个强大的ETL(Extract, Transform, Load)工具。...
本文将围绕"graalvm-ce-java11-linux-amd64-21.0.0.2.tar.gz"这一特定版本,深入探讨GraalVM的核心特性、安装过程及使用方法。 一、GraalVM核心特性 1. 多语言支持:GraalVM不仅支持Java,还支持JavaScript、Ruby...
这篇博客“java自带压缩方式的性能比较”可能详细分析了这两种压缩方法的效率和应用场景。通过提供的代码文件`CompressTestMain.java`、`GzipUtils.java`和`ZipUtils.java`,我们可以推测作者可能构建了一个测试环境...
- 变更03:内容和格式修改(2008-11-12) #### 四、目录结构 文档包含了以下章节: 1. 目的 2. 范围 3. 具体细则 - 文件名 - 文件组织 - 缩进排版 - 注释 - 声明 - 方法 - 语句 - 空白 - 命名规范 - ...
"性能最好的Java文件上传组件"是指一种优化了上传速度和资源消耗的工具,它能够有效地处理大文件上传、多文件并发上传等问题,提高应用的用户体验。在这个场景中,我们提到了基于"COS"的Java文件上传组件。COS通常指...
- **附录D:性能**:探讨如何优化Java程序,提高其运行效率。 - **附录E:关于垃圾收集的一些话**:讲解Java内存管理和垃圾回收机制的工作原理。 - **附录F:推荐读物**:提供一些进一步学习的书籍和资源推荐。 ###...
在Java编程语言中,文件读写操作是程序与外部数据交互的基本能力。这篇学习笔记将带你初探这个领域,适合新手入门。我们将讨论如何使用Java进行文件的读取、写入以及一些常见的应用场景。 首先,Java提供了java.io...