文档章节

java 四种写文件比较

远方__
 远方__
发布于 2016/12/23 12:32
字数 481
阅读 3
收藏 0


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 豪秒

本文转载自:http://blog.csdn.net/sinat_27615265/article/details/50736345

上一篇: 设计模式三
下一篇: Java 文件读写
远方__
粉丝 0
博文 82
码字总数 0
作品 0
丰台
程序员
私信 提问
Hibernate QBC 语言

基本查询 以下是HQL/QBC/Native SQL三种查询策略 HQL策略: Java代码 session.createQuery("FROM Category c where c.name like 'Laptop%'"); session.createQuery("FROM Category c where c......

boonya
2015/03/25
543
0
Java 字节码工具 ASM 在 web services 开发中的应用

在基于 JAX-WS 标准的 web services 的开发中,不少实际场景都是希望采用自底向上的开发方式, 即基于已有的 Java bean 来创建 web services 。WebSphere Application Server ( 以下简称 WA...

IBMdW
2011/09/26
2.1K
2
Java自定义Annotation方法

基本语法 Java代码 import java.lang.annotation.ElementType; import java.lang.annotation.Target; // The @Bind tag. @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME)......

stefanzhlg
2014/12/11
386
0
解压版的Tomcat基本配置和安装

大家都知道tomcat吧!因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器,也是运行Servlet和JSP的容器。...

Java编程思想
2014/03/20
10.1K
0
Tomcat 6 支持 NIO -- Tomcat的四种基于HTTP协议的Connector性能比较

Tomcat从5.5版本开始,支持以下四种Connector的配置分别为: 1.<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8......

恶魔永生
2015/01/15
243
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
14
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
15
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部