Java -- 每日一问:Java有几种文件拷贝方式?哪一种最高效?
Posted Kevin-Dev
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 每日一问:Java有几种文件拷贝方式?哪一种最高效?相关的知识,希望对你有一定的参考价值。
典型回答
Java 有多种比较典型的文件拷贝实现方式,比如:
利用 java.io 类库,直接为源文件构建一个 FileInputStream 读取,然后再为目标文件构建一个 FileOutputStream,完成写入工作。
public static void copyFileByStream(File source, File dest) throws
IOException
try (InputStream is = new FileInputStream(source);
OutputStream os = new FileOutputStream(dest);)
byte[] buffer = new byte[1024];
int length;
while ((length = is.read(buffer)) > 0)
os.write(buffer, 0, length);
或者,利用 java.nio 类库提供的 transferTo 或 transferFrom 方法实现。
public static void copyFileByChannel(File source, File dest) throws
IOException
try (FileChannel sourceChannel = new FileInputStream(source)
.getChannel();
FileChannel targetChannel = new FileOutputStream(dest).getChannel
();)
for (long count = sourceChannel.size() ;count>0 ;)
long transferred = sourceChannel.transferTo(
sourceChannel.position(), count, targetChannel); sourceChannel.position(sourceChannel.position() + transferred);
count -= transferred;
当然,Java 标准类库本身已经提供了几种 Files.copy 的实现。
对于 Copy 的效率,这个其实与操作系统和配置等情况相关,总体上来说,NIO transferTo/From 的方式可能更快,因为它更能利用现代操作系统底层机制,避免不必要拷贝和上下文切换。
你的朋友是不是也在准备面试呢?你可以把今天的题目分享给好友,或许你可以帮到他。
以上是关于Java -- 每日一问:Java有几种文件拷贝方式?哪一种最高效?的主要内容,如果未能解决你的问题,请参考以下文章
Java -- 每日一问:Java并发类库提供的线程池有哪几种? 分别有什么特点?