首页 > 编程语言 >Java NIO通信基础

Java NIO通信基础

时间:2024-05-26 14:24:40浏览次数:18  
标签:Java NIO 通信 线程 IO 缓冲区 选择器 通道

第3章    Java NIO通信基础

 

NIO弥补了原来面向流的OIO同步阻塞的不足,它为标准java代码提供了高速的、面向缓冲区的IO。

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

●Channel(通道)

●Buffer(缓冲区)

●Selector(选择器)

 

1.Channel(通道)

在OIO中,同一个网络连接会关联到两个流:一个输入流(Innut Stream),另一个输出流(OutpuStream)。通过这两个流,不断地进行输入和输出的操作。

在NIO中,同一个网络连接使用一个通道表示,所有的NIO的IO操作都是从通道开始的。一个通道类似于OIO中的两个流的结合体,既可以从通道读取,也可以向通道写入。

 

2.Selector 选择器

首先,回顾一个基础的问题,什么是IO多路复用?指的是一个进程/线程可以同时监视多个文件描述符(一个网络连接,操作系统底层使用一个文件描述符来表示),一旦其中的一个或者多个文件描述符可读或者可写,系统内核就通知该进程/线程。在Java应用层面,如何实现对多个文件描述符的监视呢?需要用到一个非常重要的JavaNIO组件——Selector选择器。

选择器的神奇功能是什么呢?它一个IO事件的查询器。通过选择器,一个线程可以查询多个通道的IO事件的就绪状态。

实现IO多路复用,从具体的开发层面来说,首先把通道注册到选择器中,然后通过选择器内部的机制,可以查询(select)这些注册的通道是否有已经就绪的10事件(例如可读、可写、网络连接完成等)。

一个选择器只需要一个线程进行监控,换句话说,我们可以很简单地使用一个线程,通过选择器去管理多个通道。这是非常高效的,这种高效来自Java的选择器组件 Selector,以及其背后的操作系统底层的IO多路复用的支持。

与OIO相比,使用选择器的最大优势:系统开销小,系统不必为每一个网络连接(文件描述符)创建进程/线程,从而大大减小了系统的开销。

 

 

3. 缓冲区(Buffer)

 

应用程序与通道(Channel)主要的交互操作,就是进行数据的read读取和write写入。为了完成如此大任,NIO为大家准备了第三个重要的组件——NIO Buffer(NIO缓冲区)。通道的读取,就是将数据从通道读取到缓冲区中;通道的写入,就是将数据从缓冲区中写入到通道中。

 

缓冲区的使用,是面向流的OIO所没有的,也是NIO非阻塞的重要前提和基础之一。

 

标签:Java,NIO,通信,线程,IO,缓冲区,选择器,通道
From: https://www.cnblogs.com/Yi-ling/p/18213608

相关文章

  • java整形取值范围的计算
    整形取值范围图如下:1.公式 -2^(n-1) ~ 2^(n-1)-1  其中n表示该类型共多少个bit位2.疑惑按照我的想法最大的取值范围是符号位取0,其他位取1;而最小取值范围只在最大范围基础上符号取反即可,也就是应该是-2^(n-1)-1~ 2^(n-1)-1,例如:byte类型,最大取值范围01111111,......
  • JavaScript-数组的增删改查
    数组的操作一共有四种:查询数组数据修改数组中元素的值数组添加新的数据删除数组中的元素数组的初始化有些编程语言的数组初始化是用{}包着的,而JS的数组初始化用[]letnum=[2,6,1,77,52,25,7];数组的查询想要具体查询数组中的某个元素可以用数组名num[i]表示查询数组n......
  • 华为OD机试Java - 会议室占用时间
    前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述现有若干个会议,所有会议共享一......
  • 华为OD机试Java - 智能成绩表
    前言:本专栏将持续更新互联网大厂机试真题,并进行详细的分析与解答,包含完整的代码实现,希望可以帮助到正在努力的你。关于大厂机试流程、面经、面试指导等,如有任何疑问,欢迎联系我,wechat:steven_moda;email:[email protected];备注:CSDN。题目描述小明来到某学校当老师,需要将学......
  • java选择题
    题目选自牛客网1.publicinterfaceIService{StringNAME="default";}默认类型等价表示是哪一项:A.publicStringNAME="default";B.publicstaticStringNAME="default";C.publicstaticfinalStringNAME="default";D.privateStringNA......
  • 基础6 探索JAVA图形编程桌面:集合组件详解
            我们的团队历经了数不胜数的日夜,全力以赴地进行研发与精心调试,最终成功地推出了一款具有革命性意义的“图形化编程桌面”产品。这款产品的诞生,不仅极为彻底地打破了传统代码开发那长久以来的固有模式,更是把焦点聚集于解决长期以来一直困扰着开发者的一大难题—......
  • 省钱兄科技:优质JAVA源码,实惠交易
    省钱兄科技:优质JAVA源码,实惠交易的不二之选在当今的信息化时代,软件开发已成为企业发展的重要驱动力。而在软件开发的过程中,选择高质量的源码是确保项目成功的基础。省钱兄科技,凭借其优质的JAVA源码和实惠的交易模式,成为了众多开发者和企业的首选合作伙伴。一、优质JAVA源码,铸......
  • 基于Java宿舍管理系统设计和实现开题报告
    如今,随着大学生人数的不断增长,宿舍管理工作也越来越重要。对于学生来说,宿舍是一个学习、生活和休息的重要场所,因此宿舍管理的质量将直接关系到学生的学习和生活质量。目前,大部分学校的宿舍管理工作还是手工化、纸质化、人工化,存在人力资源配置不合理、效率低下等问题......
  • 【Java学习】第39节:基础数据结构(二):链表
    目录1. 链表1)概述2)单向链表3)单向链表(带哨兵)4)双向链表(带哨兵)5)环形链表(带哨兵)习题E01.反转单向链表-Leetcode206E02.根据值删除节点-Leetcode203E03.删除倒数节点-Leetcode19E04.有序链表去重-Leetcode83E05.有序链表去重-Leetcode82E06.合......
  • Java项目:校园周边美食探索(java+SpringBoot+Mybaits+Vue+elementui+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于Springboot+vue实现的校园周边美食探索及分享平台本系统包含管理员、用户两个角色。管理员:用户管理、美食鉴赏管理、好友管理、收藏管理、系统管理用户:登录、注册、个人中心管理、美食鉴赏管理、好友管理、收藏管理......