Java NIO 中核心概念

本文深入探讨Java NIO的核心组件:Channels,Buffers和Selectors。Channels用于数据的读写,Buffers作为数据的暂存区,而Selectors则用于单线程处理多个Channel,适用于高并发场景如聊天服务。文章详细介绍了各种Channel和Buffer类型,以及如何利用Selectors提高IO效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java NIO由以下核心组件组成:

Channels

Buffers

Selectors

 

Java NIO本身有很多的类和组件,但是我认为Channel,Buffer和Selector构成了API的核心。其余的组件(例如Pipe和FileLock)仅是实用程序类,可以与这三个核心组件结合使用。因此,重点介绍这三个组件。

 

1.Channels 和 Buffers

Channel 有点像流。可以从Channel中将数据读到Buffer,也可以将数据从Buffer写到Channel:

overview-channels-buffers.png

 

有几种Channel和Buffer类型,这是Java NIO中主要实现了Channel的列表:

FileChannel

DatagramChannel

SocketChannel

ServerSocketChannel

 

这些通道涵盖UDP + TCP网络IO和文件IO。

 

这是Java NIO中的核心Buffer的实现列表:

ByteBuffer

CharBuffer

DoubleBuffer

FloatBuffer

IntBuffer

LongBuffer

ShortBuffer

 

可以很明显的看到,这些Buffer涵盖了可以通过IO发送的基本数据类型。

 

Java NIO还具有MappedByteBuffer,它与内存映射文件结合使用。

 

2.Selectors

Selectors允许单个线程处理多个Channel。如果你的应用程序打开了许多连接(通道),但每个连接的流量很少,这将很方便。例如,在聊天服务中。

这是使用Selectors处理3个Channel线程的图示:

overview-selectors.png

 

要使用Selectors,你应该用它注册一个Channel,然后调用它的select()方法。该方法将一直阻塞,直到一个已注册的Channel返回ready事件。方法返回后,线程即可处理这些事件。事件可以是建立连接,接收到的数据等。

 

原文地址: https://www.zhblog.net/go/java/tutorial/java-nio-overview?t=607

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值