博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA NIO(知识一)
阅读量:6759 次
发布时间:2019-06-26

本文共 1336 字,大约阅读时间需要 4 分钟。

java nio基本上常用的组件,selector,channel,buffer。这三个,其他的可以用到的时候再去参考就可以了。

看一本书的时候,基本看前三章或者四章基础知识,剩下的,实际生产中用到了再去看就可以。

大白话解释这三个重要的单词

Channel:

Java的nio中,channel其实是用于传输的,也可以说是管道,是一个工具,可以对比一下io中的流,很类似。但是io中的流都是单向的,但是channel通道是双向的,就是这个通道里既可以读,也可以往里面写。这个channel跟buffer打交道是比较多的,再用nio的时候,读取数据是channel把数据读取到buffer,然后应用再从buffer中读取数据。写数据则是应用程序先把数据写入到buffer中,然后chanel把数据写入到io设备中,就是这样的交互过程

buffer:

buffer常用作解释成缓冲区,再介绍channel的时候,说过数据都是在缓冲区中的,读取数据的是把数据先读到buffer中,然后再从buffer中读数据。nio中的库都是这么操作数据的,并不是再channel中读写数据。缓冲区中有三个重要的状态:position,limit,capacity,再接下来的篇幅中介绍,这里就不多介绍了。

selector

常用作解释成选择器,我把它解释成监听器,用来监听一个或者多个通道,通道可以把自己感兴趣的操作注册到selector上,比如read,write,connect,accept,然后selector负责监听。它是用单线程来处理这些操作的,单线程有单线程的好处,好处就是可以避免多线程之间的线程切换,这样开会会很大。基本一句话说明这个selector是用来管理多个通道的。

下面说说JAVA NIO的io模型,看过java nio都知道都说NIO是异步非阻塞io。

阻塞&非阻塞:

java io是阻塞IO,当你发起一个IO读取数据请求的时候,如果有数据还好可以读,没有数据IO会一直阻塞那里,而NIO则相反,如果没有数据可读就返回,告诉用户线程当前没有数据。

同步&异步:

同步IO发起IO操作的时候会一直等待操作完成,这种操作是同步的。异步IO则是发起IO操作,如果当前没有符合的操作,则返回。

重点:多路复用io模型

其实java nio就是采用多路复用io模型的,NIO中的seletor就是单线程监听注册的channel是否有就绪事件发生,一个线程管理多个channel,只有真正有读写事件发生的时候才会触发操作。多路复用是采用轮训的方式来检测事件是否到达,并对事件追忆进行处理,如果请求的事件比较多,一个线程监听还是有弊端的,处理不过来,会导致新来的事件搁置或者停留达不到快速响应。

JAVA NIO buffer (知识三)

JAVA NIO 之 channel通道(知识二)

JAVA NIO 知识一

http://shangdc.blog.51cto.com/10093778/1955793

欢迎老司机指正,提出更好的讲述和见解。

本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1955793

转载地址:http://qnzeo.baihongyu.com/

你可能感兴趣的文章
1157: 零起点学算法64——回型矩阵
查看>>
Ubuntu系统清理瘦身
查看>>
How to Analyze Java Thread Dumps
查看>>
SQL-58 获取有奖金的员工相关信息。
查看>>
整数转为罗马数字
查看>>
ubuntu 本地和服务器scp文件传输
查看>>
bitmap
查看>>
image has dependent child images
查看>>
Vim常用的命令
查看>>
redis权限认证及登录
查看>>
判断表是否存在 存储
查看>>
rox + openbox + fbpanel + conky打造又快又稳的桌面
查看>>
“蚁族” 的生活方式画像
查看>>
数据结构概述
查看>>
python自学笔记(二)python基本数据类型之字符串处理
查看>>
springboot1.5升级2.0后遇到的问题
查看>>
Leetcode Word Break II
查看>>
java 8 in action
查看>>
计算机容量及计算分析
查看>>
javascript闭包
查看>>