首页 > 编程语言 >Java——NIO三大核心部分

Java——NIO三大核心部分

时间:2023-03-04 19:57:23浏览次数:42  
标签:Java NIO Buffer 缓冲区 选择器 三大 通道

在Java NIO中,选择器(Selector)、通道(Channel)和缓冲区(Buffer)是三个核心组件。

  • 选择器:它允许一个单独的线程来监视多个输入通道。你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。可以把它比喻成一个交通指挥员,负责调度和管理多条路上的车辆。

  • 通道:它主要用来传输数据。它可以将“原缓冲区”与“目标缓冲区”要交换的数据进行传输。可以把它比喻成一条路,车辆就是数据在这条路上行驶。

  • 缓冲区:它是一个容器,用于存储数据。在NIO中,所有数据都是通过缓冲区进行读写操作的。可以把它比喻成停车场,在这里存放着车辆(数据)。

举个例子,在网络编程中,当客户端向服务器发送请求时,客户端会创建一个SocketChannel,并将其注册到Selector上。当服务器返回响应时,Selector会检测到这个SocketChannel已经准备好读取数据了,并将其加入到已选择键集中。接着,在单独的线程中处理这些键,并从SocketChannel中读取数据到Buffer中。最后再从Buffer中获取数据进行处理。

标签:Java,NIO,Buffer,缓冲区,选择器,三大,通道
From: https://www.cnblogs.com/fulaien/p/17178946.html

相关文章

  • JavaSE——StringBuilder方法
    StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。packagecom.zhao.stringdemo;publicclassStringDemo2{publicstaticvoidmain(String[]args......
  • JavaScript 文档的加载
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *浏览器在加载一个页面时,是按照自上向下......
  • java-spring纯注解开发
    1、创建配置类替代配置文件/***<p>描述:配置信息,省去编写配置文件*/@Configuration@ComponentScan("cn.tjhis")publicclassSpringConfig{}2、实现类......
  • JavaScript dom查询
    <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01//EN""http://www.w3.org/TR/html4/strict.dtd"><html> <head> <metahttp-equiv="Content-Type"content="text/html;......
  • JavaScript 前后切换图片
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <styletype="text/css"> *{ margin:0; padding:0; } #outer......
  • JavaScript 邮件的正则
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *电子邮件 * hello.nihao......
  • JavaScript Dom
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> </head> <body> <buttonid="btn">我是一个按钮</button> <scripttype="text/javasc......
  • JavaScript 正则表达式2
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *创建一个正则表达式检查一个字符串中......
  • java-spring 通过配置文件获取bean
    1、druid.properties#mysql连接参数jdbc.driver-class-name=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/wangdb?useUnicode=true&characterEncodi......
  • 2.JavaScript如何实现异步编程,可以详细描述EventLoop机制
    单线程和异步js的任务分为同步和异步两种,它们的处理方式也不同,同步任务是直接在主线程上排队执行,异步任务则会被放在任务队列中,若有多个任务(异步任务)则要在任务队列中排......