• 【Java面试】Java有几种文件拷贝方式,哪一种效率最高?


    “Java有几种文件拷贝方式,哪一种效率最高?”

    这个问题是京东一面的时候,针对4年经验的同学的一个面试题。

    大家好,我是Mic,一个工作了14年的Java程序员。

    关于这个问题的回答,我把文字版本整理到了15W字的面试文档里面。

    大家可以在我的主页加V领取。

    下面看看高手的回答。

    高手:#

    第一种,使用java.io包下的库,使用FileInputStream读取,再使用FileOutputStream写出。

    第二种,利用java.nio包下的库,使用transferTo或transfFrom方法实现。

    第三种,Java 标准类库本身已经提供了 Files.copy 的实现。

    对于 Copy 的效率,这个其实与操作系统和配置等情况相关,在传统的文件IO操作里面,我们都是调用操作系统提供的底层标准IO系统调用函数 read()、write() ,由于内核指令的调用会使得当前用户线程切换到内核态,然后内核线程负责把相应的文件数据读取到内核的IO缓冲区,再把数据从内核IO缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次IO操作。

    而NIO里面提供的NIO transferTo和transfFrom方法,也就是常说的零拷贝实现。

    它能够利用现代操作系统底层机制,避免不必要拷贝和上下文切换,因此在性能上表现比较好。

    总结#

    关于文件IO方面的问题和内容还挺多的这块属于Java里面的基础知识,但是随着这个技术知识的延展,会涉及到NIO、AIO、零拷贝、IO多路复用机制等等。

    对于求职者来说,这块内容的重要性也不言而喻。

    大家记得点赞收藏加关注!

    file

    版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构
    如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

  • 相关阅读:
    大模型:机器学习的崭新时代
    java毕业生设计宠物店管理计算机源码+系统+mysql+调试部署+lw
    2023/10/5 下午3:38:53 SCROLLINFO scrollInfo;
    【GD-1开发板】CH340驱动安装方法
    anaconda 虚拟环境中安装nginx
    starrock通过导入实现数据变更
    线性代数学习笔记9-4:复习——相似矩阵、对角化、对称矩阵
    springboot+canal+mysql+redis缓存双写一致性
    zabbix-自定义触发器
    WPF几何绘图(1)
  • 原文地址:https://www.cnblogs.com/mic112/p/16583606.html