`

02. Java NIO Channel

 
阅读更多

 

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中读取数据。

  • 大小: 7.5 KB
分享到:
评论

相关推荐

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的BIO( Blocking I/O)相比,NIO具有更好的性能和更高的灵活性。NIO的核心组件包括通道(Channel)、缓冲区(Buffer)和选择器(Selector)。...

    Java.NIO资源下载资源下载

    - **Channels 工具类**:介绍了 Java NIO 提供的一些工具类,用于简化 Channel 的使用。 #### 3. Selector(选择器) - **Selector 基础**:介绍了 Selector 的基本概念及工作原理。 - **使用 SelectionKey**:...

    java网络编程NIO视频教程

    Java NIO-Channel-FileChannel(介绍和示例) - **主要内容**:具体讲解FileChannel的使用方法,并提供示例代码。 - **学习目标**:学会如何利用FileChannel进行文件读写操作。 #### 5. Java NIO-Channel-...

    java NIO详细教程

    Java NIO的核心组件包括Channel(通道)、Buffer(缓冲区)和Selector(选择器)。 - **Channel**:通道用于连接源和目的地,支持数据的读写操作。与传统的流不同,通道支持双向通信,并且可以通过非阻塞的方式进行...

    Java NIO实战开发多人聊天室

    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-...

    JavaNIO chm帮助文档

    Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六) Selector Java NIO系列教程(七) ...

    java NIO实例

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java从1.4版本开始引入的一种新的I/O模型,它为Java应用程序提供了更高效的数据传输方式。传统的Java I/O模型(BIO)在处理大量并发连接时效率较...

    nio.zip_NIO_NewIO_NIO.c_java NIO chm_java nio

    在Java的NIO体系中,核心概念包括通道(Channel)、缓冲区(Buffer)、选择器(Selector)等。通道是数据读写的基础,它连接到数据源或目的地,如文件、网络套接字、管道等。缓冲区则用于存储和传输数据,它是NIO的...

    Java.nio

    Java.nio引入了通道(Channel)和缓冲区(Buffer)的概念。通道代表I/O操作的来源或目的地,如文件、套接字等;缓冲区则用于临时存储数据,提供了一种更有效的方式进行数据传输。NIO的核心组件还包括选择器...

    java-nio.rar_NIO_java nio

    传统的Java IO基于流(Stream)和缓冲区(Buffer)进行操作,而NIO则引入了通道(Channel)和选择器(Selector)的概念,使得多路复用变得更加容易,从而在处理大量并发连接时表现出更高的性能。 在NIO系统中,数据...

    Java NIO Socket基本

    4. **选择器使用**:通过`Selector.open()`创建选择器,然后用`channel.register(selector, interestOps)`方法将感兴趣的通道和事件注册到选择器上。`interestOps`通常包含`SelectionKey.OP_READ`和`SelectionKey.OP...

    nio.rar_NIO_java nio_java_nio_mina java n

    NIO在Java 1.4版本中引入,其核心是Channel、Buffer和Selector三大组件。下面将详细介绍这三个主要概念以及NIO在实际开发中的应用。 1. **Channel(通道)**:Channel类似于传统I/O中的流,但有显著的不同。在NIO中...

    JavaNIO.zip_java nio_nio java

    channel.register(selector, SelectionKey.OP_READ); ``` 4. **处理事件**:调用`selector.select()`等待事件,然后处理就绪的通道。 ```java Set&lt;SelectionKey&gt; keys = selector.selectedKeys(); for ...

    Java NIO英文高清原版

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java平台中用于替代标准I/O(BIO)模型的一种新机制。NIO在Java 1.4版本引入,提供了更高效的数据处理和通道通信方式,特别适用于高并发、大数据...

    java nio 读文件

    Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种不同于标准Java IO API的处理I/O操作的方式。NIO的主要特点是面向缓冲区,非阻塞I/O,以及选择器,这些特性使得NIO在处理大量并发连接时表现出更高...

    jdk 源码 保护 sun com.sum nio misc 等 rc.jar 中的源码

    然后,`nio`(New IO)是Java提供的一种非阻塞I/O模型,它引入了通道(Channel)和缓冲区(Buffer)的概念,极大地提升了I/O操作的性能。在`java.nio`包中,`FileChannel`、`SocketChannel`和`Selector`等类是核心...

Global site tag (gtag.js) - Google Analytics