- 浏览: 1333801 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
Java实现文件拷贝的4种方法(转)
2010-08-05 18:38
by
sunday,
50
visits,
网摘
,
收藏
,
编辑
来源:http://blog.csdn.net/ta8210/archive/2008/01/30/2073817.aspx
使用 java 进行文件拷贝 相信很多人都会用,不过效率上是否最好呢?最近看了看NIO决定试一试 java NIO 到底有什么性能的提升. 第一种方法:古老的方式 方法的2参数分别是原始文件,和拷贝的目的文件.这里不做过多介绍. 实现方法很简单,分别对2个文件构建输入输出流,并且使用一个字节数组作为我们内存的缓存器, 然后使用流从f1 中读出数据到缓存里,在将缓存数据写到f2里面去.这里的缓存是2MB的字节数组 第2种方法:使用NIO中的管道到管道传输 实现方法:在第一种实现方法基础上对输入输出流获得其管道,然后分批次的从f1的管道中像f2的管道中输入数据每次输入的数据最大为2MB 方法3:内存文件景象写(读文件没有使用文件景象,有兴趣的可以回去试试,,我就不试了,估计会更快) 实现方法:跟伤2个例子不一样,这里写文件流没有使用管道而是使用内存文件映射(假设文件f2在内存中).在循环中从f1的管道中读取数据到字节数组里,然后在像内存映射的f2文件中写数据. 第4种方法:管道对管道 这里实现方式与第3种实现方式很类似,不过没有使用内存影射. 下面是对49.3MB的文件进行拷贝的测试时间(毫秒) Start Copy File... file size:50290KB 解释: 在测试结果中看到 古老方式,和管道向管道传输是最快的,,,,,为什么呢?
我分析是这样的,由于另外2种方法内部都使用了 字节数组作为缓存中转,在加上NIO内部有一个贴近系统的缓存区,这无意就增加了另一个缓存器,所以相对于这2个方法就要慢许多,,如果不使用 字节数组作为数据中转的话相信速度会更快的..
不过比较惊讶的是 管道向管道传输的速度还是真挺吓人,,,
long
time
=
new
Date().getTime();
int
length
=
2097152
;
FileInputStream in
=
new
FileInputStream(f1);
FileOutputStream out
=
new
FileOutputStream(f2);
byte
[] buffer
=
new
byte
[length];
while
(
true
){
int
ins
=
in.read(buffer);
if
(ins
==-
1
){
in.close();
out.flush();
out.close();
return
new
Date().getTime()
-
time;
}
else
out.write(buffer,
0
,ins);
}
}
long
time
=
new
Date().getTime();
int
length
=
2097152
;
FileInputStream in
=
new
FileInputStream(f1);
FileOutputStream out
=
new
FileOutputStream(f2);
FileChannel inC
=
in.getChannel();
FileChannel outC
=
out.getChannel();
int
i
=
0
;
while
(
true
){
if
(inC.position()
==
inC.size()){
inC.close();
outC.close();
return
new
Date().getTime()
-
time;
}
if
((inC.size()
-
inC.position())
<
20971520
)
length
=
(
int
)(inC.size()
-
inC.position());
else
length
=
20971520
;
inC.transferTo(inC.position(),length,outC);
inC.position(inC.position()
+
length);
i
++
;
}
}
long
time
=
new
Date().getTime();
int
length
=
2097152
;
FileInputStream in
=
new
FileInputStream(f1);
RandomAccessFile out
=
new
RandomAccessFile(f2,
"
rw
"
);
FileChannel inC
=
in.getChannel();
MappedByteBuffer outC
=
null
;
MappedByteBuffer inbuffer
=
null
;
byte
[] b
=
new
byte
[length];
while
(
true
){
if
(inC.position()
==
inC.size()){
inC.close();
outC.force();
out.close();
return
new
Date().getTime()
-
time;
}
if
((inC.size()
-
inC.position())
<
length){
length
=
(
int
)(inC.size()
-
inC.position());
}
else
{
length
=
20971520
;
}
b
=
new
byte
[length];
inbuffer
=
inC.map(MapMode.READ_ONLY,inC.position(),length);
inbuffer.load();
inbuffer.get(b);
outC
=
out.getChannel().map(MapMode.READ_WRITE,inC.position(),length);
inC.position(b.length
+
inC.position());
outC.put(b);
outC.force();
}
}
long
time
=
new
Date().getTime();
int
length
=
2097152
;
FileInputStream in
=
new
FileInputStream(f1);
FileOutputStream out
=
new
FileOutputStream(f2);
FileChannel inC
=
in.getChannel();
FileChannel outC
=
out.getChannel();
ByteBuffer b
=
null
;
while
(
true
){
if
(inC.position()
==
inC.size()){
inC.close();
outC.close();
return
new
Date().getTime()
-
time;
}
if
((inC.size()
-
inC.position())
<
length){
length
=
(
int
)(inC.size()
-
inC.position());
}
else
length
=
2097152
;
b
=
ByteBuffer.allocateDirect(length);
inC.read(b);
b.flip();
outC.write(b);
outC.force(
false
);
}
}
CopyFile:b1.rmvb mode:forChannel RunTime:3203
CopyFile:b1.rmvb mode:forImage RunTime:3328
CopyFile:b1.rmvb mode:forJava RunTime:2172
CopyFile:b1.rmvb mode:forTransfer RunTime:1406
End Copy File!
发表评论
-
J2ME 的优化措施
2012-07-11 02:15 1174常见的性能瓶颈:1.文件的读写和网络的操作2.CPU3.内存4 ... -
JAVA缓存 - Cache类
2011-09-28 11:04 4612JAVA缓存有两种: 一、文件缓存,是指把数据存储在磁盘上 ... -
Java注释(Annotation)详解
2011-03-31 18:22 2398注释:在一个类中可以有多个,类似于一个类可以有多个实例; ... -
Java去除字符串中的空格、回车、换行符、制表符
2011-02-15 11:06 3554本方法采用的是java的正则表达式 import jav ... -
线程池编程
2011-01-23 21:02 1102线程池编程 -
设计模式:Java语言中的应用
2011-01-23 20:59 1318设计模式:Java语言中的应用 -
java用了中间缓存变量
2011-01-23 18:37 2394Java语法、语言特性与机制 2011-01-22 19:1 ... -
Java集合总结
2011-01-19 11:16 3818Set:不区分元素的顺序,不允许出现重复的值list:区分元素 ... -
java.util.current的主要方法简介
2011-01-08 22:18 3433JDK5中增加了Doug Lea的并发库,这一引进给java线 ... -
线程池
2011-01-08 21:03 2068对每个客户都分配一个新的工作线程。当工作线程与客户通信结束,这 ... -
SimpleDateFormat
2010-12-10 16:11 1361With SimpleDateFo ... -
使用 XStream 在 JavaBean 与 XML/JSON 之间相互转换
2010-12-10 14:24 1554XML 和 JSON 是当今常用的两种数据描述与传输的格式,特 ... -
Linux上JDK的 安装和卸载 详细 (转)
2010-11-27 15:48 1923安装 1. 去http://java.sun.com ... -
java 路径问题
2010-11-26 16:21 12951.JSP/Servlet中获得当前应用的相对路径和绝对路径 ... -
对synchronized(this)的一些理解
2010-11-25 23:41 1023一、当两个并发线程访问同一个对象object中的这个synch ... -
Externalizable
2010-11-20 22:41 1357被Serializable接口声明的类的对象的内容都将被序列化 ... -
Java内省和反射机制三步曲之 - 内省
2010-11-11 12:15 1342经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java ... -
java内省机制
2010-11-11 11:10 2396反射 (Reflection):反射就是让你可以通 ... -
Design Pattern: Thread-Specific Storage 模式
2010-11-11 00:00 1208无论如何,要编写一个多执行绪安全(thread-safe)的程 ... -
Design Pattern: Two-phase Termination 模式
2010-11-10 23:59 1048Two-phase Termination直译的话是“两相终止 ...
相关推荐
Java实现文件拷贝的小程序 本资源是一个使用Java语言实现文件拷贝的小程序,具有很实用的功能。下面是对这个小程序的详细解释和知识点总结: 文件拷贝的基本概念 文件拷贝是将一个文件的内容复制到另一个文件中,...
一旦连接建立成功,我们可以使用`session`对象的`execCommand()`方法执行Linux命令,比如`cp`或`rsync`进行文件拷贝。例如: ```java Channel channel = session.openChannel("exec"); ((ChannelExec) channel)....
文件拷贝的同时,进度条同步显示拷贝进度。只需要修改源文件地址与目标文件地址即可
这里是Java拷贝文件的java文件 可以按照自己选择要拷贝的文本文件 和将拷贝文件存放的目录 只需输入目标文件的地址 和目的文件的地址 以及文件名 即可实现 是课堂例子的拓展实现
Java的`java.io`包提供了一系列的流类来处理输入和输出操作,使得文件拷贝变得相对简单。在这个场景中,我们将深入探讨如何使用Java的IO流来实现文件的拷贝,以及相关的知识点。 首先,让我们了解`java.io`包中的...
今天复习了一下java流的知识,做了个小例子,实现文件的拷贝。(中文和空格都能很好的读取)(PrintWriter\OutputStreamWriter\FileOutputStream)
功能强大的文件拷贝工具类 复制文件 @author:heyuelin 2011-01-06 @param srcFile 源文件File @param destDir 目标目录File @param isClone true:将按照源文件目录拷贝,false:将提取出文件拷贝到...
Java中实现文件拷贝的示例代码如下: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class...
Java 实现文件拷贝的七种方式 Java 实现文件拷贝是 Java 编程中的一种常见操作。文件拷贝是指将源文件的内容复制到目标文件中,实现文件的备份、迁移或分享等目的。在 Java 中,可以使用多种方式实现文件拷贝,本文...
在Java编程中,文件拷贝是一项常见的操作,有多种实现方式。本节主要讨论了三种典型的方法,并探讨了它们的效率和底层实现机制。 首先,Java.IO类库提供了一种基于`FileInputStream`和`FileOutputStream`的文件拷贝...
使用java IO技术实现将多文件中的内容集中到一个文件上 只需输入一个文件夹的路径和目的路径即可完成文件拷贝复制 并且解决了中文乱码的问题s
请输入您要拷贝的源文件. 请输入您要拷贝的目标文件
2.实现文件的拷贝与粘贴功能。3.实现文本类文件(.txt, .java, .ini, .bat, )的预览功能(比如实现对前100行文本在某个小窗口中进行预览)。4.实现文件的重命名功能。5.实现对某个文件夹进行统计功能(如统计文件夹中...
用java实现的文件和文件夹拷贝和转移
在Java编程中,实现基于网络的文件拷贝是一项常见的任务,尤其在分布式系统或云存储应用中。这个项目的关键在于高效、稳定地传输大量数据。根据提供的标题和描述,我们来详细探讨一下如何使用Java来实现这样的功能。...
java语言(文件和文件流知识点)实现图片的拷贝,从c盘拷贝到d盘
使用java创建文件并复制到另一个文件中
总结,Java实现代理局域网文件拷贝涉及网络连接、I/O流操作和路径动态构建等多个方面。正确处理这些问题,可以确保在各种环境下稳定、高效地完成文件传输任务。在实际开发中,可以根据项目需求选择适合的方法和技术...
在Java编程中,创建一个带有进度条的文件拷贝程序是一项实用技能,尤其对于那些希望增强用户界面体验的开发者来说。下面将详细讲解这个“JAVA 带进度条的文件拷贝程序”的核心知识点。 首先,我们需要理解的是,...
3、实现文件拷贝和文件夹拷贝(文件夹拷贝指深度拷贝,包括所有子目录和文件)。 4、实现指定文件的加密和解密。 5、实现指定文件和文件夹的压缩。 6、实现压缩文件的解压。 7、文件管理器具有图形界面。 建议使用...