Java NIO的通道(Channel)类似流,但又有些不同:
1. 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
2. 通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:
Channel的实现
这些是Java NIO中最重要的通道的实现:
FileChannel 从文件中读写数据。
DatagramChannel 能通过UDP读写网络中的数据。
SocketChannel 能通过TCP读写网络中的数据。
ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
package com.ihuning.javase.demo.nio; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileChannelDemo { private static final String FILE_PATH = "src/com/ihuning/javase/demo/nio/demo.txt"; public static void display() throws Exception { RandomAccessFile file = new RandomAccessFile(FILE_PATH,"rw"); FileChannel channel = file.getChannel(); int readByte = 0; ByteBuffer buf = ByteBuffer.allocate(10); while((readByte = channel.read(buf)) != -1) { buf.flip(); //prepare for reading for(int i = 0; i < readByte; i++) { System.out.print((char)buf.get(i)); } } file.close(); } public static void show() throws Exception { RandomAccessFile raf = new RandomAccessFile(FILE_PATH, "rw"); FileChannel fileChannel = raf.getChannel(); ByteBuffer buf = ByteBuffer.allocate(10); int readByte = 0; while ((readByte = fileChannel.read(buf)) != -1) { buf.flip();//prepare for reading while (buf.hasRemaining()) { System.out.print((char) buf.get()); } buf.clear();//prepare for writing } raf.close(); } public static void main(String[] args) throws Exception{ FileChannelDemo.show(); FileChannelDemo.display(); } }
注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。
相关推荐
Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO具有更好的性能和更高的灵活性。NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。...
- **Channels 工具类**:介绍了 Java NIO 提供的一些工具类,用于简化 Channel 的使用。 #### 3. Selector(选择器) - **Selector 基础**:介绍了 Selector 的基本概念及工作原理。 - **使用 SelectionKey**:...
Java NIO-Channel-FileChannel(介绍和示例) - **主要内容**:具体讲解FileChannel的使用方法,并提供示例代码。 - **学习目标**:学会如何利用FileChannel进行文件读写操作。 #### 5. Java NIO-Channel-...
Java NIO的核心组件包括Channel(通道)、Buffer(缓冲区)和Selector(选择器)。 - **Channel**:通道用于连接源和目的地,支持数据的读写操作。与传统的流不同,通道支持双向通信,并且可以通过非阻塞的方式进行...
05-Java NIO-Channel-FileChannel详解(一).mp4 06-Java NIO-Channel-FileChannel详解(二).mp4 08-Java NIO-Channel-ServerSocketChannel.mp4 09-Java NIO-Channel-SocketChannel.mp4 10-Java NIO-Channel-...
Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) ...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...
在Java的NIO体系中,核心概念包括通道(Channel)、缓冲区(Buffer)、选择器(Selector)等。通道是数据读写的基础,它连接到数据源或目的地,如文件、网络套接字、管道等。缓冲区则用于存储和传输数据,它是NIO的...
Java.nio引入了通道(Channel)和缓冲区(Buffer)的概念。通道代表I/O操作的来源或目的地,如文件、套接字等;缓冲区则用于临时存储数据,提供了一种更有效的方式进行数据传输。NIO的核心组件还包括选择器...
传统的Java IO基于流(Stream)和缓冲区(Buffer)进行操作,而NIO则引入了通道(Channel)和选择器(Selector)的概念,使得多路复用变得更加容易,从而在处理大量并发连接时表现出更高的性能。 在NIO系统中,数据...
4. **选择器使用**:通过`Selector.open()`创建选择器,然后用`channel.register(selector, interestOps)`方法将感兴趣的通道和事件注册到选择器上。`interestOps`通常包含`SelectionKey.OP_READ`和`SelectionKey.OP...
NIO在Java 1.4版本中引入,其核心是Channel、Buffer和Selector三大组件。下面将详细介绍这三个主要概念以及NIO在实际开发中的应用。 1. **Channel(通道)**:Channel类似于传统I/O中的流,但有显著的不同。在NIO中...
channel.register(selector, SelectionKey.OP_READ); ``` 4. **处理事件**:调用`selector.select()`等待事件,然后处理就绪的通道。 ```java Set<SelectionKey> keys = selector.selectedKeys(); for ...
Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...
Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于标准Java IO API的处理I/O操作的方式。NIO的主要特点是面向缓冲区,非阻塞I/O,以及选择器,这些特性使得NIO在处理大量并发连接时表现出更高...
然后,`nio`(New IO)是Java提供的一种非阻塞I/O模型,它引入了通道(Channel)和缓冲区(Buffer)的概念,极大地提升了I/O操作的性能。在`java.nio`包中,`FileChannel`、`SocketChannel`和`Selector`等类是核心...