在Java编程中,复制文件的方法有很多,而且经常要用到。我以前一直是缓冲输入输出流来实现的(绝大多数人都是如此),近来在研究JDK文档时发现,用 文件通道(FileChannel)来实现文件复制竟然比用老方法快了近三分之一。下面我就来介绍一下如何用文件通道来实现文件复制,以及在效率上的对比
-
用文件通道的方式来进行文件复制
/**
* 使用文件通道的方式复制文件
*
* @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();
}
}
}
-
与普通的缓冲输入输出流的复制效率的对比
普通的缓冲输入输出流代码:
测试代码:
输出结果:
-
由 此可见,FileChannel复制文件的速度比BufferedInputStream/BufferedOutputStream复制文件的速度快了 近三分之一。在复制大文件的时候更加体现出FileChannel的速度优势。而且FileChannel是多并发线程安全的。
P.S.
由于本人也不是什么高手大神,只是一名普通的Java开发者,所以其中有什么不到之处,请大家多多谅解,批评指出,一起交流讨论
VoyageLiu
2013.12.01
原文地址:http://jingyan.baidu.com/article/ff4116259c2d7712e4823780.html
相关推荐
在RuoYi-Vue-fast-master这个压缩包中,我们可以找到整个项目的源代码和资源文件,以下是关于该框架的一些关键知识点的详细说明: 1. **Java技术栈**:作为标签,"java"表明RuoYi框架是用Java语言开发的。Java以其...
Eclipse是一款广受欢迎的开源集成开发环境(IDE),主要用于Java编程,同时也支持其他语言如C++、Python等。它的高效性和强大的功能深受开发者喜爱,其中快捷键是提高开发效率的关键工具。这篇博客“Eclipse快捷键...
**标题:“Hibernate缓存机制,转载”** **描述:**这篇博客主要探讨了Hibernate框架中的缓存机制,包括一级缓存和二级缓存的概念、工作原理以及如何在实际开发中应用。 **标签:“源码 工具”** **知识点详解:*...
了解并熟练使用这些快捷键,能够帮助开发者更高效地在MyEclipse中工作,减少鼠标操作,提高编程速度,从而提升整体的开发效率。为了更好地掌握这些快捷键,可以在实际开发中不断实践,逐步形成肌肉记忆。同时,...
Red5的主要功能包括实时流传输、录制、播放、存储和回放媒体文件。与商业流媒体服务器如Adobe Flash Media Server相比,Red5是免费且开源的,因此受到许多开发者青睐。 二、Tomcat简介 Tomcat是一个轻量级的Java...
例如,msm-javolution-serializer-1.6.5.jar 提供了基于 Javolution 的序列化方法,而 msm-kryo-serializer-1.6.5.jar 支持使用 Kryo 进行更高效的序列化。 5. **重启 Tomcat**:完成配置后,重启 Tomcat 服务器,...
文档中提到的ADS版本为2014.01,安捷伦公司在文档的版权声明中特别指出,该文档的任何部分都不得在未获得书面同意的情况下通过任何形式或手段(包括电子存储、检索或翻译成外语)进行复制或转载,这体现了对知识产权...