import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.nio.ByteBuffer;

import java.nio.channels.FileChannel;

/**

* 测试各种写文件的方法性能。

*

* @author 老紫竹 JAVA世纪网(java2000.net)

*

*/

public class T {

public static void main(String[] args) {

FileOutputStream out = null;

FileOutputStream outSTr = null;

BufferedOutputStream Buff = null;

FileWriter fw = null;

int count = 1000000;// 写文件行数

try {

byte[] bs = "测试java 文件操作\r\n".getBytes();

out = new FileOutputStream(new File("C:/add.txt"));

long begin = System.currentTimeMillis();

for (int i = 0; i < count; i++) {

out.write(bs);

}

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(bs);

}

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.flush();

fw.close();

long end3 = System.currentTimeMillis();

System.out.println("FileWriter执行耗时:" + (end3 - begin3) + " 豪秒");

long begin4 = System.currentTimeMillis();

String path = "C:/add3.txt";

ByteBuffer bb = ByteBuffer.wrap(bs);

FileChannel out2 = new FileOutputStream(path).getChannel();

for (int i = 0; i < count; i++) {

out2.write(bb);

bb.rewind();

}

out2.close();

long end4 = System.currentTimeMillis();

System.out.println("FileChannel执行耗时:" + (end4 - begin4) + " 豪秒");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

fw.close();

Buff.close();

outSTr.close();

out.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

在我的笔记本上,运行结果如下

FileOutputStream执行耗时:4891 豪秒

BufferedOutputStream执行耗时:78 豪秒

FileWriter执行耗时:438 豪秒

FileChannel执行耗时:2812 豪秒

当然最终生成的文件都是正确的

总结:

BufferedOutputStream 由于有缓冲,性能明显好

FileOutputStream 性能最差,因为其每次都写入字节。

FileWriter 性能很一般

FileChannel使用了nio,但如果没有缓冲,必能太指望性能了

以上为转载内容:

本人亲测结果:(运行3次)

FileOutputStream执行耗时:7035 豪秒

BufferedOutputStream执行耗时:100 豪秒

FileWriter执行耗时:439 豪秒

FileChannel执行耗时:8501 豪秒

FileOutputStream执行耗时:7001 豪秒

BufferedOutputStream执行耗时:96 豪秒

FileWriter执行耗时:491 豪秒

FileChannel执行耗时:8162 豪秒

FileOutputStream执行耗时:7119 豪秒

BufferedOutputStream执行耗时:97 豪秒

FileWriter执行耗时:416 豪秒

FileChannel执行耗时:8070 豪秒

java 文件比较_java 四种写文件比较相关推荐

  1. java double 数组排序_java四种数组排序

    数组的四种排序 1.快速排序法Arrays.sort(); 用法1.sort(byte[] a) 对指定的 byte 型数组按数字升序进行排序. sort(byte[] a, int fromInde ...

  2. java 获取包路径_java获取java文件路径的四种方法

    java获取java文件路径的四种方法 发布时间:2020-04-17 11:03:45 来源:亿速云 阅读:750 作者:小新 今天小编给大家分享的是java获取java文件路径的四种方法,很多人都 ...

  3. C++ 创建文件夹的四种方式

    在开头不得不吐槽一下,我要的是简单明了的创建文件夹的方式,看得那些文章给的都是复杂吧唧的一大坨代码,不仔细看鬼知道写的是啥.因此,为了方便以后自己阅读,这里自己写一下 C++ 创建文件夹的四种方式: ...

  4. java多线程流式写入文件夹_java多线程写入同一文件

    1.[代码][Java]代码 package com.thread; import java.io.File; import java.io.FileNotFoundException; import ...

  5. java的四种访问权限_Java四种访问权限

    一.访问权限简介 访问权限控制: 指的是本类及本类内部的成员(成员变量.成员方法.内部类)对其他类的可见性,即这些内容是否允许其他类访问.Java 中一共有四种访问权限控制,其权限控制的大小情况是这样 ...

  6. php格式图片怎么打开方式,php格式文件打开的四种方法

    php文件格式怎么打开?要搞清楚php文件用什么打开,首先我们来看php文件是什么文件,PHP是一个网页脚本,文件后缀名为.php,如下图: 但不同于html xml 标签语言,直接可以通过浏览器打开 ...

  7. 对Java中常见的四种I/O模型理解

    对Java中常见的四种I/O模型理解 1.1 知识科普 1.1.1 同步阻塞I/O(Blocking I/O) 1.1.1.1 阻塞与非阻塞 1.1.1.2 同步与异步 1.1.1.3 同步阻塞I/O ...

  8. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  9. C++之文件操作探究(一):写文件——文本文件

    相关博文:C++之文件操作探究(一):写文件--文本文件 相关博文:C++之文件操作探究(二):读文件--文本文件 相关博文:C++之文件操作探究(三):写文件--二进制文件 相关博文:C++之文件操 ...

最新文章

  1. nginx前端根据$remote_addr分发方法
  2. jenkins中配置Ant
  3. HDU 2035 人见人爱A^B
  4. 使用sklearn加载公共数据集、内存数据与CSV文件
  5. C++笔记——析构函数
  6. 轩辕传奇服务器合并信息,轩辕传奇9月1日部分服务器合服公告
  7. 安全数据科学家的日常:需要做什么?将面对哪些挑战?
  8. 【计算机网络】—— 停止-等待协议
  9. Python——装饰器的学习笔记(legacy)
  10. Linux开机过程(转)
  11. PGM:不完备数据的参数估计
  12. Ajax学习札记(前言)
  13. php中的全局变量$GLOBALS与global的区别
  14. R数据分析:如何绘制回归分析结果的森林图
  15. 企业个人所得税网上申报系统_增值税、企业所得税、个人所得税申报难点梳理...
  16. linux cat用法退出,Linux常用命令 - cat命令用法详解
  17. Winedit 下载第三方库
  18. python win32gui模块详解_Python笔记_第二篇_面向过程_第二部分_4.常用模块的简单使用_窗体控制模块(win32con、win32gui)...
  19. skinme找不到java_配置forge后,无法获取依赖
  20. (数据库系统)(十二)故障恢复

热门文章

  1. golang的一个简单小爬虫demo学习记录
  2. SLAM中有关占据栅格地图的的表示方法和利用激光传感器构建占据栅格地图的方法
  3. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...
  4. maven 的安装配置 和编译java程序
  5. 文件,文件夹的创建和删除
  6. nginx添加ssl证书认证
  7. Windows批处理命令学习三
  8. 新版XenCenter添加剪贴板共享功能
  9. 命名实体识别——日期识别
  10. JS判断一个数组中是否有重复值的三种方法