NIO与原有的I/O有同样的作用和目的,是基于原有的I/O的改进和扩展。NIO与原有的I/O不同,他是基于特殊的缓冲块进行的搞笑I/O操作。NIO的缓冲区块与普通的缓冲区不同,他是一块连续的空间,他的内存的分配不再java的
堆栈中,不受java内存的回收的影响;他的实现不是纯java代码,而是本地代码,这样操作系统,可以直接与缓冲区进行交互,java程序只需要完成对缓冲区的读写,而后续操作由操作系统完成。
使用NIO来实现对文件的复制。效率比一般的IO流快很多。在使用NIO的时候采用了缓冲刘的封装,所以效率会更高。
以下是利用NIO实现对文件的复制
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class CopyFile {
/**
* 实现文件复制
*
* @param srcFile
* srcFile源文件
* @param destFile
* destFile目标文件
* @throws IOException
*/
public void copy(String srcFile, String destFile) throws IOException {
long begin = System.currentTimeMillis();
// 创建ByteBuffer缓冲区,大小可以根据实际情况指定
ByteBuffer buffer = ByteBuffer.allocate(1024);
// 获取 NIO读取通道
FileInputStream fin = null;
FileChannel in = null;
// 获取NIO写入通道
FileOutputStream fout = null;
FileChannel out = null;
fin = new FileInputStream(srcFile);
in = fin.getChannel();
fout = new FileOutputStream(destFile);
out = fout.getChannel();
int len = -1;
// 当文件读到末尾时候结束循环
while ((len = in.read(buffer)) != -1) {
// 在write之前,将position和limit标志设置好
buffer.flip();
// 按照设定的position位置开始读,到limit结束
out.write(buffer);
// 初始化position/limit/capcity标志的位置,为下一次循环读取做准备
buffer.clear();
}
long end = System.currentTimeMillis();
// 根据前后时间之差,计算复制文件所需的时间
System.out.println(end - begin);
out.close();
in.close();
fout.close();
fin.close();
}
/**
* Description
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
CopyFile copyFile = new CopyFile();
copyFile.copy(args[0], args[1]);
}
}
NIO是在原有的IO的基础上进行改进,因此使用NIO来读写文件,首先还是需要使用IO流类。不是所有的IO流都支持NIO操作,支持NIO的操作的类有FileInputStream、FileOutputStream和RandomAccessFile。
NIO并不是对原有的I/O的替代,尽管NIO在I/O操作时速度快,但是由于其底层借助了大量的本地代码,对操作系统和硬件平台有很大的依赖性,浙江影响Java的可移植性。
分享到:
相关推荐
这两种I/O模型在处理数据传输时有着显著的区别,对程序性能和并发性有着深远的影响。 **阻塞I/O(Blocking I/O)** 阻塞I/O模型是最常见的I/O模式,在Java中主要体现在`InputStream`和`OutputStream`等基本I/O类上...
在Java编程领域,JDK 7引入了一个重要的更新——NIO2.0,也被称为“New I/O 2.0”或“AIO”(Asynchronous I/O)。这个更新极大地提升了Java处理I/O操作的能力,特别是在文件系统交互和网络通信方面。NIO2.0主要增加...
Java I/O, NIO, 和 NIO.2 是Java平台中处理输入/输出操作的核心组件,对于任何Java开发者来说,理解和掌握这些概念至关重要。本文将深入探讨这些技术,旨在提供一个全面而详尽的概述。 Java I/O(Input/Output)是...
NIO的核心在于通道(Channels)和缓冲区(Buffers)的概念,与传统的流(Streams)模型有着显著的区别。 1. **缓冲区(Buffers)** NIO中的核心概念是缓冲区,它允许数据在被读取或写入时存储在一个特定区域。缓冲...
它与同步I/O形成鲜明对比,同步I/O在执行时会阻塞调用线程,直到I/O操作完成,而异步I/O则允许程序在等待I/O操作完成时继续执行其他任务,从而提高系统的整体效率。 在传统的同步I/O模型中,当一个线程发起读取或...
这本书在第二版中对Java I/O进行了更新,涵盖了从Java 5到Java 8的最新发展,包括NIO.2(New I/O 2)框架的介绍。 1. **Java I/O基础**:书中首先介绍了Java I/O的基本概念,如流、缓冲区、字符编码和文件操作。流...
Java I/O(输入/输出)系统是Java编程语言中用于处理数据流的重要组成部分,它允许程序与外部资源如文件、网络、硬件设备等进行交互。深入理解Java I/O的工作机制对于开发高效、可靠的系统至关重要。以下是对Java I/...
Java I/O学习笔记: 磁盘操作 字节操作 字符操作 对象操作 网络操作 NIO & AIO Java I/O Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行...
11. **NIO(非阻塞I/O)** - **java.nio包**:引入了通道(Channel)和缓冲区(Buffer)的概念,提供异步I/O操作。 - **Selector**:用于多路复用,监控多个通道的事件。 12. **工具类** - **PrintStream**:...
Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...
Java中的I/O流是程序与外部数据交互的重要机制,它允许数据在程序、文件、网络等之间流动。I/O流分为两大类:字符流(Character Stream)和字节流(Byte Stream),每类又分为输入流(Input Stream)和输出流...
Java IO和NIO提供了两种不同的I/O处理...了解这两种I/O处理方式的区别和特点,可以帮助开发者根据具体的应用需求选择合适的I/O模型。随着Java语言的发展,NIO也在不断地扩展和优化,为开发者提供了更多的选择和工具。
nio4r, ruby的新 I/O 注意:这是 2.x的稳定分支。 对于 1.x 的旧版分支,请参见: https://github.com/socketry/nio4r/tree/1-x-stable为 ruby ( nio4r ) 添
Java I/O, NIO以及NIO2是Java编程语言中处理输入输出操作的重要API集合,它们分别代表着不同的I/O处理方式和技术。 Java I/O是指传统的I/O操作,涉及经典的I/O类库,如File、RandomAccessFile以及各种流类(stream ...
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而Java NIO(Non-blocking Input/Output)则是Java提供的一种高效、低延迟的I/O模型。本篇文章将深入探讨NIO在连网和异步IO方面的应用,以及如何通过源码...
Java I/O系统是Java编程语言中的一个重要组成部分,它允许程序进行输入输出操作,与外部世界进行数据交互。在Java中,I/O系统基于流的概念,流可以被视为数据的流动渠道,既可以用来读取数据(输入流),也可以写入...