8.java NIO

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负责存取数据

 

posted @ 2022-08-15 22:10  努力的达子  阅读(28)  评论(0编辑  收藏  举报