`
morle
  • 浏览: 73955 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java API 写文本文件比较

阅读更多

   最近项目中要用到对大文件进行操作,做了下JAVA io方面的测试

    对于java.io包中的FileOutputStream,BufferedOutputStream和FileWriter三个不同类写入到文本文件性能,测试代码和结果如下:

    环境: 机器ibm thinkpad 61i,配置:2.0G双核CPU,2G内存,操作系统xp sp2,java api1.5.

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;

public class TestTxtWriter {

	public TestTxtWriter() {
	}

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

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

			fw = new FileWriter("D:/FileWriter.txt");
			long begin3 = System.currentTimeMillis();
			for (int i = 0; i < count; i++) {
				fw.write("测试FileOutputStream,BufferedOutputStream和FileWriter,对文件写操作\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=1 000的,即写文件1 000行的时候,写出的文件大小为66.4KB:
FileOutputStream执行耗时:31 豪秒
BufferedOutputStream执行耗时:16 豪秒
FileWriter执行耗时:0 豪秒


2.当count=10 000的,即写文件10 000行的时候,写出的文件大小为664KB:
FileOutputStream执行耗时:78 豪秒
BufferedOutputStream执行耗时:32 豪秒
FileWriter执行耗时:15 豪秒

 

3.当count=100 000的,即写文件100 000行的时候,写出的文件大小为6.7MB:
FileOutputStream执行耗时:453 豪秒
BufferedOutputStream执行耗时:172 豪秒
FileWriter执行耗时:156 豪秒

 

4.当count=1 000 000的,即写文件1 000 000行的时候,写出的文件大小为64.8MB:
FileOutputStream执行耗时:4500 豪秒
BufferedOutputStream执行耗时:2422 豪秒
FileWriter执行耗时:2500 豪秒

 

5.当count=10 000 000的,即写文件10 000 000行的时候,写出的文件大小为648MB:
FileOutputStream执行耗时:52453 豪秒
BufferedOutputStream执行耗时:25921 豪秒
FileWriter执行耗时:36094 豪秒

 

FileOutputStream执行耗时:51547 豪秒
BufferedOutputStream执行耗时:35203 豪秒
FileWriter执行耗时:31609 豪秒

 

FileOutputStream执行耗时:50078 豪秒
BufferedOutputStream执行耗时:33515 豪秒
FileWriter执行耗时:29516 豪秒


     由以上数据可以看到,如果不用缓冲流BufferedOutputStream,FileOutputStream写文件的鲁棒性是很不好的。当写 10 000 000行的文件的时候,FileOutputStream比FileWriter要慢10 000-21 000毫秒(10-21秒)。
     不要小看这几秒的时间。当操作的数据量很大的时候,这点性能的差距就会很大了。在操作数据库,通过java导出生成数亿条记录文件的时候,等待的时间要10分钟以上,性能相差大了。

2
0
分享到:
评论

相关推荐

    JAVA_API1.6文档(中文)

    本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含...

    JavaAPI1.6中文chm文档 part1

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    java api1.6中文文档chm

    java api1.6中文文档,能离线使用。 (ps:对于能正常显示目录但是不能正常显示文本内容的,请右键该文档,解除对该文档的锁定)

    Java 1.6 API 中文 New

    本文档是 Java Platform Standard Edition 6 的 API !Java 1.6 API的中文帮助文档。 深圳电信培训中心徐海蛟博士教学用api中文文档。支持全文检索,在线即时查询。 里面列出了,Java的所有类及其使用方法! Java ...

    JavaAPI中文chm文档 part2

    由于文件比较大 分为两个部分,这是第二部分 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供...

    java api最新7.0

    JAVA开发人员最新版本7.0 api文档!本文档是 Java Platform Standard Edition 7 的 API !Java 1.7 API的中文帮助文档。 深圳电信培训中心 徐海蛟博士教学用api 7.0中文文档。支持全文检索,在线即时查询。 里面列...

    java操作Hadoop源码之HDFS Java API操作-上传文件

    java操作Hadoop源码之HDFS Java API操作-上传文件,附带所需全部jar包,欢迎下载学习。

    java 文本标签大全 api

    各种java文本标签api 文档 查找使用

    JDK1.6API文档

    JDK1.6API。java1.6开发文档,最新官网文档。满足java开发需求

    JavaPDF操作类库API_Free Spire.PDF for Java_5.1.0

    1.功能:该API为适用于Java平台下,通过后端程序代码调用API接口操作PDF文档,可实现如下功能: 1.1 文档转换:PDF转图片/Word/SVG/XPS/HTML/XPS/TIFF、图片转PDF 1.2 文档操作:文档创建、合并、拆分、压缩、复制...

    java jdk-api-1.6 中文 chmd

    javax.imageio.stream Java Image I/O API 的一个包,用来处理从文件和流中产生的低级别 I/O。 javax.management 提供 Java Management Extensions 的核心类。 javax.management.loading 提供实现高级动态加载的类...

    java文本编辑器的设计与实现.doc

    这是一个java文本编辑器的设计,功能比较完整

    JAVA API(JAVA帮助文本 JavaTM 2 Platform Standard Edition 5.0 API 规范官方完整版)分卷二

    JavaTM 2 Platform Standard Edition 5.0 API 规范官方完整版,大小为34.44MB,只能上传小于20MB的文件,没办法只能分成两卷发布。 分卷一下载地址:http://download.csdn.net/source/2130155

    JAVA API(JAVA帮助文本 JavaTM 2 Platform Standard Edition 5.0 API 规范官方完整版)分卷一

    JavaTM 2 Platform Standard Edition 5.0 API 规范官方完整版,大小为34.44MB,只能上传小于20MB的文件,没办法只能分成两卷发布。 卷二地址:http://download.csdn.net/source/2130191

    Openai Api开发文档 - Openai Api中文文档 - Openai Api中英双语文档

    Openai Api开发文档 | Openai Api中文文档 | Openai Api中英双语文档 ChatGPT是由OpenAI开发的一个人工智能聊天机器人程序,于2022年11月推出。该程序使用基于GPT-3.5架构的大型语言模型并通过强化学习进行训练。 ...

    javaIo与流 读写文件

    1、在读写文件时必须的 2、File类 ...运用FileInputStream和FileOutputStream类读写文本文件 运用BufferedReader和BufferedWriter类读写文本文件 运用DataInputStream和DataOutputStream类读写二进制 文件

    免费版 PDF Java组件_Free Spire.PDF for Java 1.1.0

    Free Spire.PDF for JAVA 是一个 100% 免费的 PDF API, 在 JAVA 应用程序上调用该组件即可读取,写入和保存 PDF 文档,无需安装 Adobe Acrobat。使用此 JAVA PDF 组件,开发人员可以在 JAVA 应用程序(J2SE 和 J2EE...

Global site tag (gtag.js) - Google Analytics