各类写入方法

/**
*1 按字节写入 FileOutputStream
*
* @param count 写入循环次数
* @param str 写入字符串
*/
public void outputStreamTest(int count, String str) {
File f = new File("f:test1.txt");
OutputStream os = null;
try {
os = new FileOutputStream(f);
for (int i = 0; i < count; i++) {
os.write(str.getBytes());
}
os.flush();
System.out.println("file's long:" + f.length());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
*2 按字节缓冲写入 BufferedOutputStream
*
* @param count 写入循环次数
* @param str 写入字符串
*/
public void bufferedOutputTest(int count, String str) {
File f = new File("f:test2.txt");
BufferedOutputStream bos = null;
try {
OutputStream os = new FileOutputStream(f);
bos = new BufferedOutputStream(os);
for (int i = 0; i < count; i++) {
bos.write(str.getBytes());
}
bos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
*3 按字符写入 FileWriter
*
* @param count 写入循环次数
* @param str 写入字符串
*/
public void fileWriteTest(int count, String str) {
File f = new File("f:test.txt");
Writer writer = null;
try {
writer = new FileWriter(f);
for (int i = 0; i < count; i++) {
writer.write(str);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
} /**
*4 按字符缓冲写入 BufferedWriter
*
* @param count 写入循环次数
* @param str 写入字符串
*/
public void bufferedWriteTest(int count, String str) {
File f = new File("f:test3.txt");
OutputStreamWriter writer = null;
BufferedWriter bw = null;
try {
OutputStream os = new FileOutputStream(f);
writer = new OutputStreamWriter(os);
bw = new BufferedWriter(writer);
for (int i = 0; i < count; i++) {
bw.write(str);
}
bw.flush();
if(f.exists()){
f.delete();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
*5 按字符缓冲写入 BufferedWriter and BufferedOutputStream
*
* @param count 写入循环次数
* @param str 写入字符串
*/
public void bufferedWriteAndBufferedOutputStreamTest(int count, String str) {
File f = new File("f:test4.txt");
BufferedOutputStream bos=null;
OutputStreamWriter writer = null;
BufferedWriter bw = null;
try {
OutputStream os = new FileOutputStream(f);
bos=new BufferedOutputStream(os);
writer = new OutputStreamWriter(bos);
bw = new BufferedWriter(writer);
for (int i = 0; i < count; i++) {
bw.write(str);
}
bw.flush();
if(f.exists()){
f.delete();
System.out.println("delete---");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
*6 按字符缓冲写入 BufferedWriter and FileWriter
*
* @param count 写入循环次数
* @param str 写入字符串
*/
public void bufferedWriteAndFileWriterTest(int count, String str) {
File f = new File("f:test5.txt");
FileWriter fw=null;
BufferedWriter bw = null;
try {
fw=new FileWriter(f);
bw = new BufferedWriter(fw);
for (int i = 0; i < count; i++) {
bw.write(str);
}
bw.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
bw.close();
if(f.exists()){
f.delete();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}

测试写入类

public static void main(String[] args) {
String str = "abcdefghiJKLMN!";
int count = 1000000;
TestOutputStream t = new TestOutputStream(); //1.fileWrite's time
long start = System.currentTimeMillis();
t.fileWriteTest(count, str);
long end = System.currentTimeMillis();
System.out.println("fileWrite's time---------" + (start - end)); //2.outputStreamTest's time
start = System.currentTimeMillis();
t.outputStreamTest(count, str);
end = System.currentTimeMillis();
System.out.println("outputStreamTest's time---------" + (start - end)); //3.bufferedOutputTest's time
start = System.currentTimeMillis();
t.bufferedOutputTest(count, str);
end = System.currentTimeMillis();
System.out.println("bufferedOutputTest's time---------" + (start - end)); //4.bufferedWriteTest's time
start = System.currentTimeMillis();
t.bufferedWriteTest(count, str);
end = System.currentTimeMillis();
System.out.println("bufferedWriteTest's time---------" + (start - end)); //5.bufferedWrite And FileWriterTest's time
start = System.currentTimeMillis();
t.bufferedWriteAndFileWriterTest(count, str);
end = System.currentTimeMillis();
System.out.println("bufferedWrite And FileWriterTest's time---------" + (start - end)); //6.bufferedWrite And BufferedOutputStreamTest's time
start = System.currentTimeMillis();
t.bufferedWriteAndBufferedOutputStreamTest(count, str);
end = System.currentTimeMillis();
System.out.println("bufferedWrite And BufferedOutputStreamTest's time---------" + (start - end));
}

测试结果

/**
* 测试结果
*
* 1.file's long:16kb
*
fileWrite's time----------36
outputStreamTest's time----------167
bufferedOutputTest's time----------17
bufferedWriteTest's time----------14
bufferedWrite And FileWriterTest's time----------9
bufferedWrite And BufferedOutputStreamTest's time----------12
*
* 2.file's long:1600kb
*
fileWrite's time----------69
outputStreamTest's time----------1282
bufferedOutputTest's time----------68
bufferedWriteTest's time----------40
bufferedWrite And FileWriterTest's time----------52
bufferedWrite And BufferedOutputStreamTest's time----------37
*
* 3.file's long:16000kb
*
fileWrite's time----------555
outputStreamTest's time----------12448
bufferedOutputTest's time----------599
bufferedWriteTest's time----------346
bufferedWrite And FileWriterTest's time----------316
bufferedWrite And BufferedOutputStreamTest's time----------358
*
*4.file's long:160000kb
*
fileWrite's time----------5203
outputStreamTest's time----------127182
bufferedOutputTest's time----------5972
bufferedWriteTest's time----------3445 最优
bufferedWrite And FileWriterTest's time----------5904
bufferedWrite And BufferedOutputStreamTest's time----------5353 *
*5.file's long:1600000kb
*
fileWrite's time----------50416
outputStreamTest's time----------1303242
bufferedOutputTest's time----------60931
bufferedWriteTest's time----------46697
bufferedWrite And FileWriterTest's time----------48710
bufferedWrite And BufferedOutputStreamTest's time----------64354
*/

总结:

如果按字符和字节来分类,除方法1和2,其余都是按字符写入文件,字符写入一般比字节快;看java API可知,FileWriter的父类就是OutputStreamWriter,他俩都是实现Writer类,从这点上来说,方法4和6几乎没区别,时间有些微的差别,但内部机制是一样的。

[测试]java IO写入文件效率——几种方法比较的更多相关文章

  1. java分享第十六天( java读取properties文件的几种方法&java配置文件持久化:static块的作用)

     java读取properties文件的几种方法一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取Propert ...

  2. java写入文件的几种方法分享

    转自:http://www.jb51.net/article/47062.htm 一,FileWritter写入文件 FileWritter, 字符流写入字符到文件.默认情况下,它会使用新的内容取代所 ...

  3. java写入文件的几种方法小结

    一,FileWritter写入文件 FileWritter, 字符流写入字符到文件.默认情况下,它会使用新的内容取代所有现有的内容,然而,当指定一个true (布尔)值作为FileWritter构造函 ...

  4. Java IO写文件效率

    写入方法: /** *1 按字节写入 FileOutputStream * * @param count 写入循环次数 * @param str 写入字符串 */ public void output ...

  5. 精----Java读取xml文件的四种方法

    xml文件: Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VA ...

  6. Java读取Excel文件的几种方法

    Java读取 Excel 文件的常用开源免费方法有以下几种: 1. JDBC-ODBC Excel Driver 2. jxl.jar 3. jcom.jar 4. poi.jar 简单介绍: 百度文 ...

  7. java读取properties文件的几种方法

    一.项目中经常会需要读取配置文件(properties文件),因此读取方法总结如下: 1.通过java.util.Properties读取 Properties p=new Properties(); ...

  8. java读取xml文件的四种方法

    Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT> <VALUE> ...

  9. iOS开发小技巧--边接受数据边写入文件的两种方法

    一.NSFileHanle 使用注意点:在往文件写入数据时,必须创建一个空的文件 指定文件写入的方式 -- 覆盖还是追加 最后记得关闭 <1>代码是在大文件传输的练习中截取的.写入数据之前 ...

随机推荐

  1. 一步一步从原理跟我学邮件收取及发送 5.C语言的socket示例

    说到 C 语言版本的程序,首先要解决的问题就是兼容性. 作为 20 年开发有 10 多年是在服务端的程序员,我深刻地感受到服务端平台的两极分化之严重,linux 派对 windows 那是超级的不屑一 ...

  2. PHP defined() 函数

    定义和用法 defined() 函数检查某常量是否存在. 若常量存在,则返回 true,否则返回 false. 语法 defined(name) 参数 描述 name 必需.规定要检查的常量的名称. ...

  3. Web API <五> 序列化

    在 Asp.Net Web Api 中提供了两种 媒体类型格式化器(mime-type formatter),分别用于支持 JSON 和 XML 数据的格式化处理.默认两种格式化器已集成到了 Asp. ...

  4. MySQL 多版本并发控制(MVCC)

    可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁的操作,因此开销会很低.主要实现的是非阻塞的读操作,写操作也只是锁定必要的行.MVCC的实现是通过保存数据在某个时间点的快照来实现的,也 ...

  5. Linux - 在Ubuntu下永久修改主机名

    查看主机名 root@jiqing:~# hostname jiqing 1.临时生效 root@jiqing:~# hostname jq root@jiqing:~# hostname jq 重新 ...

  6. win7 mysql 数据库轻松实现数据库定时备份

    本地备份: 第一步: 安装一个mysql. 第二步: 在命令行中配置mysql 打开环境变量将mysql 安装路径配置到path中 第三部: cmd 中输入:mysqldump -uroot -p12 ...

  7. 使用 cURL 度量 Web 站点的响应时间

    curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.canada.com 0. ...

  8. _2_head_中标签

    创:20_3_2017修:5_4_2017 什么是title标签? --title   页面名(双) -- 整个html的页面名字,相当于一本书的书名 <title>北门吹雪</ti ...

  9. TCP/IP详解 卷1 第二十章 TCP的成块数据流

    先补充一个知识: 1.停止等待协议:是tcp保证传输可靠的重要途径,"停止等待"就是指发送完一个分组就停止发送,等待对方确认之后,才能继续发送下一个分组 停止等待协议的优点是简单, ...

  10. atom中开发vue常用插件

    atom: 开发利器,界面友好,配色出色,好用的插件众多. language-vue: 这个是首推,因为它就是为vue而生的呀,支持很多vue里的提示.在空的vue页面敲tem,vue模板的提示就自动 ...