zoukankan      html  css  js  c++  java
  • Java 复制文件的高效方法

    转载自:http://jingyan.baidu.com/article/ff4116259c2d7712e4823780.html

    在Java编程中,复制文件的方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发 现,用文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之一。下面我就来介绍一下如何用文件通道来实现文件复制,以及在效率上 的对比

    1. 用文件通道的方式来进行文件复制

          /**

          * 使用文件通道的方式复制文件

          * 

          * @param s

          *            源文件

          * @param t

          *            复制到的新文件

          */

          public void fileChannelCopy(File s, File t) {

              FileInputStream fi = null;

              FileOutputStream fo = null;

              FileChannel in = null;

              FileChannel out = null;

              try {

                  fi = new FileInputStream(s);

                  fo = new FileOutputStream(t);

                  in = fi.getChannel();//得到对应的文件通道

                  out = fo.getChannel();//得到对应的文件通道

                  in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道

              } catch (IOException e) {

                  e.printStackTrace();

              } finally {

                  try {

                      fi.close();

                      in.close();

                      fo.close();

                      out.close();

                  } catch (IOException e) {

                      e.printStackTrace();

                  }

              }

          }

    2. 与普通的缓冲输入输出流的复制效率的对比

      普通的缓冲输入输出流代码:

      测试代码:

      输出结果:

    3. 由 此可见,FileChannel复制文件的速度比BufferedInputStream/BufferedOutputStream复制文件的速度快了 近三分之一。在复制大文件的时候更加体现出FileChannel的速度优势。而且FileChannel是多并发线程安全的。

  • 相关阅读:
    ASP.Net控件基础篇
    ASP.Net
    有关于静态
    重载
    继承和多态
    面向对象的封装
    .net webform 把word转为html
    lambda 表达式 比较时间大小
    js 根据名字获取cookie 的方法
    .net 常用的命名空间和类
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/4763544.html
Copyright © 2011-2022 走看看