当前位置: 首页 > 教程 > Java NIO >

Java NIO 概述

精华
小牛编辑
234浏览
2023-03-14

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

  • 通道(Channel)
  • 缓冲区(Buffer)
  • 选择器(Selector)

Java NIO拥有比这些更多的类和组件,但在我看来Channel,Buffer 和Selector构成了API的核心。其余组件,例如 Pipe和FileLock仅仅是与三个核心组件结合使用的实用程序类。因此,在本NIO概述中,我将重点介绍这三个组件。其他组件在本教程的其他地方以其自己的文本进行了说明。

通道和缓冲区

通常,NIO中的所有IO都以Channel开头。Channel有点像流。从Channel数据可以读入Buffer。数据也可以从一个写Buffer成Channel。这是一个说明:

Java NIO:通道将数据读取到缓冲区中,而缓冲区将数据写入通道中

有几种Channel和Buffer类型。以下是Java NIO中Channel的主要实现类:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

如您所见,这些通道涵盖UDP + TCP网络IO和文件IO。

这些类也有一些有趣的接口,但是为了简单起见,我将它们排除在Java NIO概述之外。在本教程的其他内容中将对它们进行解释。

以下是Java NIO中Buffer的核心实现类:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

这些Buffer涵盖了您可以通过IO发送的基本数据类型: byte,short,int,long,float,double 和字符.。

Java NIO可以使用MappedByteBuffer与内存映射文件结合使用。

选择器

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

以下是使用Selector处理Channel:

Java NIO:使用Selector来处理Channel

最后更新:

类似资料

  • 我在两个线程中使用一个SocketChannel,一个线程用于发送数据,另一个线程用于接收数据。 线程1:使用上述socketchannel写入数据 线程2:使用相同的socketchannel读取数据 我没有在socketchannel中使用任何选择器,因为我需要写和读是异步的(使用两个不同的线程) 问题:当连接丢失时,socketchannel。write()和socketchannel。re

  • 概述 国际化和本地化的目的就是让一个网站应用能做到根据用户语种和指定格式的不同而提供不同的内容。 Django 对文本翻译, 日期、时间和数字的格式化,以及时区提供了完善的支持。 实际上,Django做了两件事: 由开发者和模板作者指定应用的哪些部分应该翻译,或是根据本地语种和文化进行相应的格式化。 根据用户的偏好设置,使用钩子将web应用本地化。 很显然,翻译取决于用户所选语言,而格式化通常取决

  • 虽然Django 满满的便捷性让Web 开发人员活得轻松一些,但是如果不能轻松地部署你的网站,这些工具还是没有什么用处。Django 起初,易于部署就是一个主要的目标。有许多优秀的方法可以轻松地来部署Django: 如何使用WSGI 部署 部署的检查清单 FastCGI 的支持已经废弃并将在Django 1.9 中删除。 如何使用FastCGI、SCGI 和AJP 部署Django 如果你是部署D

  • 本书概述 进程的概念大家都很熟悉,但你是否能准确说出僵尸进程的含义呢?还有 COW(Copy On Write)、Flock(File Lock)、Epoll 和 Namespace 的概念又是否了解过呢? 本书汇集了进程方方面面的基础知识,加上编程实例,保证阅读后能自如地回答以上问题,在项目开发中对进程的优化也有更深的理解。 本书架构 本书按循序渐进的方式介绍进程的基础概念和拓展知识,主要涵盖以

  • Docker在1.12.0和以上版本中增加了swarm模式。通过swarm模式管理的Docker Engines集群称之为“Swarm”。并可以通过Docker CLI来创建Swarm,在Swarm中部署应用服务,以及管理Swarm。 功能特点 在Docker Engines中集成了集群管理功能:通过Docker CLI可以创建一个用来发布应用services的swarm,而不需要安装其他任何额外

  • 这是 Elasticsearch 官方的 PHP 客户端。我们把 Elasticsearch-PHP 设计成低级客户端(低级设计模式),使用时不会偏离 REST API 的用法。 客户端所有方法几乎都与 REST API 对应,而且也与其他编程语言的客户端(如 ruby, python 等)方法结构相似。我们希望这种对应方式可以方便开发者更加容易上手客户端,且以最小的代价快速从一种编程语言转换到另