- 浏览: 216181 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
chen569844962:
博主,你好,这个代码貌似不太完整,不知道能不能共享一下带我给我 ...
JTable 导出 Excel 利用 jxl.jar -
z995204127:
我去,发多了,太激动
【原创】swing 按钮点击 调用swt窗口(SWT浏览器)browser -
z995204127:
楼主,我去,太尼玛给力了,我搞了一天没搞定,原来要用一个线程包 ...
【原创】swing 按钮点击 调用swt窗口(SWT浏览器)browser -
z995204127:
楼主,我去,太尼玛给力了,我搞了一天,原来要用一个线程包装下。 ...
【原创】swing 按钮点击 调用swt窗口(SWT浏览器)browser -
changhuzhao:
好用!
org/eclipse/ui/internal/util/SWTResourceUtil
java API 写文本文件比较 FileOutputStream, BufferedOutputStream, FileWriter
- 博客分类:
- Java Eclipse
最近项目中要用到对大文件进行操作,做了下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分钟以上,性能相差大了。
转于:http://hi.baidu.com/mutou420/blog/item/6ac9b0d3f42555d6a9ec9a47.html
发表评论
-
ubuntu jdk
2013-07-17 14:14 1455This is only a preview; cha ... -
Ubuntu 中安装 Eclipse
2013-07-17 13:44 1154b.Then righ-click t ... -
java sdk eclipse ubuntu
2013-06-28 23:50 916sudo rm /var/lib/dpkg/info/or ... -
ubuntu eclipse
2012-11-05 09:33 900ubuntu 12.04 eclipse 安装 ... -
ubuntu jdk java
2012-11-05 09:12 936第一步,下载jdk-7u4-linux-i586.tar ... -
jogl 拒绝访问Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError:
2012-08-29 11:15 1481Exception in thread "AWT-E ... -
rxtx
2012-07-14 11:39 0Using RXTX From Rxtx T ... -
hibernate mysql 远程连接问题 字符编码
2011-04-07 20:47 1397报错:Illegal mix of collations (l ... -
hibernate search 初始笑话
2011-01-16 11:18 1169安装官方的说明配置hibernate search , 才是 ... -
Hibernate access HQL 日期时间 Date 与oracle时的区别
2011-01-10 21:51 1544由oracle转access后,发现查询某段时间时报错,折腾了 ... -
Java Hibernate access
2011-01-09 20:26 1351现在想把开发完成的程序,弄个简化版,以前是Java Hiber ... -
程序中调用cmd命令时,参数带有空格的解决方法
2010-08-09 20:31 9044比如在程序中调用cmd命令打开一个文件,而文件路径带有 ... -
java 打包(fatjar)发布,制作安装文件(inno setup)
2010-08-09 18:27 2091使用fatjar 打包,新建空文件夹META-INF, 新建 ... -
Java:log4j与 log4j.properties的配置说明
2010-07-29 21:10 1028Java:log4j与log4j.properties的配置说 ... -
使用Fat Jar打包后 Uncaught error fetching image:
2010-07-29 19:55 2477一个错误困扰了好多天了, 在Eclipse里运行没有问题,使 ... -
Eclipse 工程复制粘贴后中文乱码问题
2010-06-04 22:53 1264今天遇到一个奇怪的问题,我想把eclipse工程复制一份然后备 ... -
jTextField的字符长度设为固定长度,超长不能输入 和 只能输入数字
2010-03-16 11:09 7926----------------------------- ... -
【原创】swing 按钮点击 调用swt窗口(SWT浏览器)browser
2010-03-11 14:00 3713网上搜索swing 和swt 都是关于两者的区 ... -
将swt窗口居中(屏幕中间)将swing窗口居中
2010-03-11 13:51 2874将swt窗口居中 Dimension dem=T ... -
java swt browser
2010-03-10 16:29 4760package cmsdb.common.tool; i ...
相关推荐
本指南将深入探讨Java中的文件读写API,包括常用的方法、性能分析以及不同方式之间的对比。以下是对相关知识点的详细说明: 1. **File类**: Java中的`java.io.File`类是文件和目录路径名的抽象表示形式。它提供了...
在写文件时,Java提供了`FileOutputStream`和`FileWriter`。`FileWriter`主要用于写入文本文件,而`FileOutputStream`则更为通用,可以处理任何字节流。为了提高性能,通常会结合使用`BufferedOutputStream`。例如,...
首先,Java提供了一系列的类来支持文件操作,如`java.io.File`用于文件和目录的操作,`java.io.FileReader`、`java.io.FileWriter`用于文本文件的读写,`java.io.BufferedReader`、`java.io.BufferedWriter`用于提高...
I/O流是Java处理数据输入输出的关键部分,包括字节流(如`FileInputStream`和`FileOutputStream`)和字符流(如`FileReader`和`FileWriter`)。`InputStreamReader`和`OutputStreamWriter`用于在字节流与字符流之间...
Java 提供了 `FileReader` 和 `FileWriter` 类用于文本文件的读写。`FileReader` 用于读取字符流,而 `FileWriter` 用于写入字符流。如果需要处理二进制数据,可以使用 `FileInputStream` 和 `FileOutputStream`。...
- `FileReader`和`FileWriter`是字符流类,适用于处理文本文件,它们在内部使用了缓冲,但没有`BufferedReader`高效。 - `BufferedInputStream`和`BufferedOutputStream`是字节流的缓冲版本,可以与`...
在给出的代码片段中,使用了三种不同的方法写入文件:直接使用 `FileOutputStream`,配合 `BufferedOutputStream`,以及使用 `FileWriter`。每种方法都计算了写入一定数量行的时间,以比较它们的效率。 ### 注意...
对于音频等二进制文件,一般使用FileInputStream和FileOutputStream,或者BufferedInputStream和BufferedOutputStream进行读写,它们可以处理任何类型的数据,不受字符编码限制。 总结来说,Java IO流是处理输入...
- **FileReader** 和 **FileWriter**:这是字符流的基础类,用于读取和写入文本文件。使用它们时,需要注意字符编码。例如: ```java FileWriter writer = new FileWriter("Java写入文件1.txt"); writer.write(...
Java 二进制和文本输入输出 Java 中的输入输出(Input/Output,简称 I/O)是指Java 程序与外部世界交互的一种机制。Java 提供了多种方式来实现输入输出,包括二进制I/O 流和文本I/O 流。 二进制I/O 流 Java 中的...
- **FileReader与FileWriter**:用于读写文本文件,自动处理字符编码。用法类似FileInputStream,但需要配合BufferedReader和BufferedWriter提升性能。 3. **缓冲流(Buffered Stream)** - **BufferedReader与...
总的来说,Java提供了丰富的API来处理文件I/O,无论是文本数据还是二进制数据,都可以灵活地保存到指定的文件中。在编写代码时,理解不同类的功能、正确使用流以及妥善处理异常都是确保程序正确性和健壮性的重要因素...
8. **读写文件内容**:使用FileWriter的write()方法写入文本,使用BufferedReader的readLine()方法逐行读取文件内容。 9. **异常处理**:进行文件操作时,通常需要捕获IOException,这是所有I/O操作可能出现的异常...
- `FileInputStream`和`FileOutputStream`:分别用于读取和写入文件的字节流,通常配合`BufferedInputStream`和`BufferedOutputStream`使用以提高性能。 - `BufferedReader`和`BufferedWriter`:用于处理字符流,...
9. **高级特性**: `PrintWriter`类提供了格式化输出功能,`Files`类(Java 7引入)提供了更简洁的文件操作API,如`Files.write()`。 10. **NIO与通道**: Java NIO(非阻塞I/O)提供了通道(Channel)和缓冲区...
在`java.io`包中,`File`类用于表示文件或目录路径,`FileWriter`和`FileReader`用于文本文件的读写,而`BufferedInputStream`和`BufferedOutputStream`则用于二进制文件的处理。`java.nio`包引入了通道(Channel)...
- **`BufferedOutputStream`**: `BufferedOutputStream` 提供了缓冲机制,可以减少对磁盘的访问次数,从而提高写文件的速度。通常与 `FileOutputStream` 结合使用。 ```java FileOutputStream fos = new ...
本文将详细介绍三种常见的Java写入文件的方法,它们分别是:`FileOutputStream`、`BufferedOutputStream`和`FileWriter`。这三种方式各有特点,适用于不同的场景。 首先,我们来看`FileOutputStream`。`...
3. **字符流**:对于文本文件,Java提供了`FileReader`和`FileWriter`,它们是字符流,更适合处理文本数据。 4. **缓冲流**:为了提高效率,可以使用`BufferedInputStream`和`BufferedOutputStream`,以及对应的...