JDK1.4引入了java.nio.*包,用以提高IO操作的性能。
下面做个试验测试拷贝一个59M的文件,使用不缓冲的FileInoutStream,带缓冲的BufferedFileInputStream,nio包中的FileChannel和ByteBuffer。

代码:

public class FileCopy {public static final int  BSIZE = 1024;public static void main(String[] args) {String fileFrom = "D:" + File.separator + "操作系统" +File.separator+ "week9_文件系统" +File.separator+ "video.mp4";String fileTo = "D:" + File.separator + "操作系统" +File.separator+ "week9_文件系统" +File.separator+ "videoCopy.mp4";long startMill;long endMill;startMill = System.currentTimeMillis();copyWithNio(fileFrom, fileTo);endMill = System.currentTimeMillis();System.out.println("use " + (endMill - startMill) / 1000 + "s");}public static void copyWithNoBuffer(String from, String to) {try {FileInputStream fr = new FileInputStream(from);FileOutputStream fw = new FileOutputStream(to);int i;while ((i = fr.read()) != -1) {fw.write(i);}fr.close();fw.close();System.out.println("end of copy");} catch (IOException e) {e.printStackTrace();}}public static void copyWithBuffer(String from, String to) {try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(from));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(to));int i;while ((i = bis.read()) != -1) {bos.write(i);}bis.close();bos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void copyWithNio(String from, String to) {try {FileChannel in = new FileInputStream(from).getChannel();FileChannel out = new FileOutputStream(to).getChannel();ByteBuffer bb = ByteBuffer.allocate(BSIZE);while (in.read(bb) != -1) {bb.flip();out.write(bb);bb.clear();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

结论:

  1. FileInoutStream:24分钟
  2. BufferedFileInputStream: 5秒
  3. FileChannel和ByteBuffer: 1秒

从结论看,Nio的性能提升是很明显的。

转载于:https://www.cnblogs.com/gatsbydhn/p/5287115.html

javase-NIO相关推荐

  1. 【JAVASE】NIO

    1.NIO概述 在我们学习Java的NIO流之前,我们都要了解几个关键词 同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务 ...

  2. java 套接字关联的通道_Java 通道教程 – NIO 2.0

    # Java 通道教程 – NIO 2.0 > 原文: [https://howtodoinjava.com/java7/nio/java-nio-2-0-channels/](https:// ...

  3. Five ways to maximize Java NIO and NIO.2--转

    原文地址:http://www.javaworld.com/article/2078654/java-se/java-se-five-ways-to-maximize-java-nio-and-nio ...

  4. javase获取项目根目录_JavaSE:如何设置/获取您自己的文件和目录属性

    javase获取项目根目录 在上一篇文章"确定特定文件系统支持的视图"中 ,了解如何询问文件系统存储,并了解特定文件属性视图的可支持性. 简而言之,我们将探索最高级和最重要的文件属 ...

  5. JavaSE:如何设置/获取您自己的文件和目录属性

    在上一篇文章"确定特定文件系统支持的视图"中 ,了解如何询问文件系统存储,并了解特定文件属性视图的可支持性. 简而言之,我们将探索最高级和重要的文件属性视图之一,即用户定义的文件属 ...

  6. JavaSE 7,8:确定特定文件系统支持的视图

    如果您对文件或目录有疑问,例如是否隐藏文件,是否为目录,文件的大小以及文件的所有者,则可以从元数据中获得这些问题(以及许多其他问题)的答案,这是关于其他数据的数据. NIO.2将元数据的概念与属性相关 ...

  7. epoll, NIO,AIO

    Java 网络IO编程总结(BIO.NIO.AIO均含完整实例代码) Java中BIO,NIO和AIO使用样例 https://blog.insanecoder.top/javazhong-bio-n ...

  8. JavaSE总结知识点 重要的点(并不是详细的教材语录)

    JavaSE总结知识点 9天看完 Day1 一.Java基础概述 1.常用DOS命令 2.Java发展史 3.Java语言特点 4.JVM.JRE.JDK 5.Java和C++的区别 6.import ...

  9. Javase 笔记知识点概要

    Javase 笔记知识点概要 Java 概述 计算机基础知识 |-计算机概述了解,键盘功能键的认识和快捷键,常见的DOS命令, Java语言概述 |-Java语言的特点,JDK,JRE,JVM的作用及 ...

  10. 【JavaSE】入门概述(1~41)

    1.Java视频及配套资料下载指南 2.Java基础学习导读 Java语言的三个层面 基本语法:变量.运算符.流程控制.数组 面向对象:把数据及对数据的操作方法放在一起,作为一个相互依存的整体--对象 ...

最新文章

  1. dma工作时cpu工不工作_CPU如何工作?
  2. 来一波我和朋友们的私房菜!
  3. 局内网用户访问wamp本地站点
  4. HashTable和HashMap的区别(网上整理)
  5. 在传统行业做数字化转型之最终篇
  6. 有效数据外含有额外数据_Excel|应用数据有效性规范数据录入
  7. python3虚拟环境不带任何模块_Python3虚拟环境-不存在的包
  8. 2019 最烂密码排行榜大曝光!网友:已中招!
  9. 使用Visual Studio来创建动态库/静态库,并加载
  10. [编织消息框架][消息处理模式]管道模式
  11. PHP 保留 n 位小数
  12. Java中几种输出当前时间的代码
  13. Axure 9母版引发事件
  14. 技术负责人如何带领好团队
  15. html 手机底部广告,手机网站被UC浏览器强制嵌入推荐广告解决方案
  16. reduceByKey中的加号是什么意思
  17. 中小型局域网上网管理组网方案
  18. 阅读分享-超抵抗力最大的路径走
  19. 帅某---考研---空间直线绕坐标轴旋转、二次曲面方程
  20. adreno630gpu参数_高通骁龙AdrenoGPU天梯以及直观分析,推荐。

热门文章

  1. python字符类型的一些方法
  2. 【转载】程序员有哪些电脑技能让外行感到神奇?
  3. WCF-Discovery的协议基础:WS-Disvovery(客户端驱动探测服务)
  4. 广州.NET俱乐部活动通知(11月17日)
  5. 【LeetCode】无重复字符的最长子串【滑动窗口法】
  6. 《快活帮》第九次团队作业:Beta冲刺与验收准备
  7. C# 如何使用 Elasticsearch (ES)
  8. java创建文件和目录
  9. 纪中2016.8.13比赛不明总结
  10. Java-Frame