首页 > 编程语言 >8.java NIO

8.java NIO

时间:2022-08-15 22:23:38浏览次数:47  
标签:BIO java NIO Buffer 缓冲区 选择器 通道

1.简介

2.NIO和BIO的比较

1.BIO以流的方式处理数据,而NIO以块的放还是处理数据,块的I/O都效率比流的I/O高很多

2.BIO是阻塞的,NIO是非阻塞的

3.BIO基于字节流或者字符流进行操作,而NIO基于Channel(通道)和Buffer(缓存区)进行操作,数据总是从通道读取到缓冲区,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道事件(比如:连接请求,数据达到等)因此使用单个线程就可以监听多个客户端通道

NIO   BIO
  面向缓冲区(Buffer)   面向流(Stream)
  非阻塞(Non Blocking IO)   阻塞IO(Blocking IO)
  选择器(Selector)   

3.NIO三大核心原理

NIO有三大核心部分:Channel(通道)   Buffer(缓冲区)   Selector(选择器)

buffer缓冲区

  缓冲区本质是一块可以写入数据,然乎可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用于方便的访问该块内存。相比较于对数组的操作,Buffer API更加容易操作和管理

 

Channel(通道)、

  JAVA Nio的通道,类似于流,但又不同:既可以从通道中读取数据,又可以写数据到通道。但流的(input或者output)读写操作经常是单向额。通道可以非阻塞读取和写入通道,通道可以支持读取或者写入缓冲区,也支持异步读写

 

Selector选择器

  Selector选择器是java NIO组件,可以能检查一个或者多个NIO通道,并确定哪些通道已经准备好进行读取或者写入。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接,提高效率

1.每个通道对应一个Buffer

2.一个线程对应selector,一个selector对应多个channel(连接)

3.程序切换到那个channel是由事件决定的

4.selector会根据余不同的事件,在各个通道上切换

5.Buffer是一个内存块,底层是一个数组

6.数据的读取写入是通过Buffer完成的,BIO中要么是输入流,或者输出流,不能双向,但是NIO的buffer是可以读也可以写

7.java NIO系统核心在于:通道和缓冲区。通道表示打开到IO设备(例如:文件、嵌套字)的连接。若需要使用NIO系统,需要获取用于连接IO设备的通道以及 用于容纳数据的缓冲区。然后操作缓冲区,对数据进行处理

总结:channel负责传输,Buffer负责存取数据

 

标签:BIO,java,NIO,Buffer,缓冲区,选择器,通道
From: https://www.cnblogs.com/wmd-l/p/16589861.html

相关文章

  • JavaWeb4
    1.会话技术会话:一次会话中包含多次请求和响应一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止功能:在一次会话的范围内的多次请求间共享数据......
  • Java-封装结果集示例
    1@Data2publicclassResultDataimplementsSerializable{34/**5*状态码6*/7privateStringcode;89/**10*提示信息11......
  • 代码审计(Java)——WebGoat_Xss
    一、写在前面刚刚入职,适应了几天后抓紧开始学习,毕竟学无止境且自己太菜了……面试的时候,负责人问了我一些关于Java代审的问题,不过之前接触的更多是php的代审。熟......
  • Java的HexUtils
    自己写的一个HexUtils,记录下好Copy。1.pom相关 <alg-bc.version>1.71</alg-bc.version><dependency><groupId>org.bouncycastle</groupId>......
  • [Javascript] Object.freeze: using Object.freeze in function params to enforce im
    functionlotteryNum(){return(Math.round(Math.random()*100)%58)+1;}functionrecordNumber(luckLotteryNumbers:readonlynumber[],num:number):numb......
  • day21--Java集合04
    Java集合049.Set接口方法Set接口基本介绍无序(添加和取出的顺序不一致),没有索引不允许重复元素,所以最多只有一个nullJDKAPI中接口的实现类有:Set接口的常用方法......
  • mybatis_9_创建JavaBean文件
    创建JavaBean文件packagetk.mybatis.simple.mapper;importlombok.Data;@DatapublicclassIndicator{privateStringindicatorName;}文件结构: ......
  • 第七周Java总结
    上周忘记写了....补上....马上开学了,没有往后进行,接下来打算把java从零再看一遍java还是有自己特色的收拾心态准备好开学了这几周下来总体而言对于这个新的语言还不是......
  • JavaScript
    一、js简介js与java没有关系js也是一门编程语言它也是可以写后端代码的nodejs支持js代码跑在后端服务器上JavaScript是脚本语言JavaScript是一种轻量级的编程语言......
  • java过滤器(Filter)、Spring拦截器(Handler)
    首先,tomcat容器中有Servlet容器和Spring容器,java过滤器。Filter是在Servlet规范中定义的,是Servlet容器支持的;Handler是在Spring容器内的,是Spring框架支持的......