Java NIO Selector2025年3月21日 | 阅读 4 分钟 在 Java NIO 中,Selector 是可选择通道的复用器,它是一种可以置于非阻塞模式的特殊类型的通道。它可以检查一个或多个 NIO 通道,并确定哪些通道已准备好进行通信,即读取或写入。 Selector 的作用是什么Selector 用于使用单个线程处理多个通道。因此,它需要更少的线程来处理通道。线程之间的切换对操作系统来说代价很高。因此,为了提高系统效率,使用了它。 让我们看看一个使用 Selector 处理 3 个通道的线程的示意图 让我们看看 Gather 原理的简单示意图 ![]() 创建 Selector我们可以通过调用 Selector.open() 方法来创建一个 Selector,如下所示 打开服务器套接字通道让我们看看打开服务器套接字通道的示例 使用 Selector 选择通道在注册了一个或多个通道到 Selector 后,我们可以调用 select() 方法之一。此方法返回一个已准备好执行我们想要执行的事件(即连接、读取、写入或接受)的通道。 用于选择通道的各种 select() 方法是
selectedKeys() 一旦我们调用了任何一个 select() 方法,它就会返回一个值,表明一个或多个通道已准备就绪,然后我们可以通过调用 Selector 的 selectedKeys() 方法来访问已准备好的通道,如下所示。 我们可以迭代 selected key set 来访问已准备好的通道,如下所示 上面的循环迭代 selected key set 中的一个 key,以确定使用已选定的通道执行的操作。 完整的 select 循环框图如下所示 ![]() 基本 Selector 示例主程序 客户端程序 输出 主程序输出为 客户端程序输出为 |
Java NIO 中的通道是高效地在实体和字节缓冲区之间传输数据的媒介。它从实体读取数据并将其放入缓冲区块以供消耗。通道充当 Java NIO 提供的访问...
阅读 3 分钟
Scatter/Gather 或 Vectored I/O 在 Java NIO 中,通道提供了称为 scatter/gather 或 vectored I/O 的重要功能。这是一种简单而强大的技术,通过该技术可以使用单个 write() 函数将字节从一组缓冲区写入流……
阅读 4 分钟
Java NIO 通道中的文件锁:FileLock 锁定或尝试锁定文件的给定部分。它属于 java.nio.channels 包,此功能从 JDK 1.4 开始在 Java 中可用。FileLock 用于以共享模式或非共享模式锁定文件....
阅读 3 分钟
教程 Java 提供了第二个 I/O 系统,称为 NIO(New I/O)。它提供了与标准 I/O API 不同的 I/O 工作方式。它是 Java(从 Java 1.4 开始)的替代 I/O API。它支持面向缓冲区的、基于通道的方法进行 I/O 操作……
阅读 2 分钟
Java NIO 字符集:JDK 1.4 使用 java.nio.charset.Charset 包引入了字符集的概念。它在给定字符集和 UNICODE 之间的编码和解码中起着重要作用。字符集的名称必须遵循一定的规则。它必须以数字或字母开头....
阅读1分钟
Java NIO 中的编码和解码:使用 Java NIO API,可以执行从一个字符集到另一个字符集的编码和解码操作。CharsetEncoder 和 CharsetDecoder 这两个类在 ByteBuffer 和 CharBuffer 之间的编码和解码中起着重要作用。Reactor 跟踪...
阅读 2 分钟
Java 还用于将通道与 TCP(传输控制协议)网络套接字连接。它等同于网络编程中使用的 Java 网络套接字。ServerSocketChannel 类位于 java.nio.channels 包中。让我们看一个 ServerSocketChannel 的例子:ServerSocketChannel ssc...
阅读 2 分钟
Java 在 Java NIO 中,读写是 I/O 的基本过程。从通道读取:我们可以创建一个缓冲区,然后让通道读取数据。从通道写入:我们可以创建一个缓冲区,用数据填充它,然后让...
阅读 2 分钟
Java NIO 中的通道之间的数据传输:在 Java NIO 中,我们可以非常频繁地直接将数据从一个通道传输到另一个通道。文件数据的批量传输非常普遍,FileChannel 类中添加了一些优化方法,使其更...
阅读 2 分钟
Java 缓冲区定义在 java.nio 包内。它定义了所有缓冲区共有的核心功能:limit(限制)、capacity(容量)和 current position(当前位置)。Java NIO 缓冲区用于与 NIO 通道交互。它是我们可以写入数据的内存块,它...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India