Java -- 每日一问:Java有几种文件拷贝方式?哪一种最高效?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 每日一问: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有几种文件拷贝方式?哪一种最高效?的主要内容,如果未能解决你的问题,请参考以下文章

每日一问:Redis有几种数据结构,底层分别是怎么存储的?

每日一问:Redis有几种数据结构,底层分别是怎么存储的?

每日一问:Redis有几种数据结构,底层分别是怎么存储的?

Java -- 每日一问:Java并发类库提供的线程池有哪几种? 分别有什么特点?

Java -- 每日一问:你了解Java应用开发中的注入攻击吗?

Java -- 每日一问:有哪些方法可以在运行时动态生成一个Java类?