Java学习笔记 (二十五) 初步了解NIO

什么是NIO ?

jdk 1.4之后,Java中新增了 java.nio包,Java NIO提供了与标准IO API不同的IO工作方式。

NIO 的几个概念

缓冲区 Buffer

缓冲区是一个容器,存放特定原始类型(char、byte、int、long、float等)的固定大小的数据。缓冲区具有内容、位置、限制和容量。

通道 Channel

Channel 是一个通道,网络数据通过Channel 读取和写入, 通道与流不同之处是在于通道是双向的,流只能是 读或者写,而通道可以读、写 或者二者同时进行。

多路复用器 Selector

多路复用器 提供选择已经就绪的任务的能力,Selector 会不断地轮询注册在其上的Channel ,如果某个Channel 上面发生读或者写事件,这个Channel 就处于就绪状态,会被Selector 轮询出来。

字符集 Charset

用于在字节和unicode之间进行转换的字符集、解码器和编码器

IO 与 NIO 的区别

IONIO
面向流面向缓冲
阻塞IO非阻塞IO

面向流 VS 面向缓冲

面向流的Java IO意味着每次从流读取一个或多个字节。它们不会被缓存到任何地方。

Java NIO的面向缓冲区的方法略有不同。数据被读入缓冲区,然后从缓冲区处理数据。可以根据需要在缓冲区中来回移动。这在处理过程中具有更大的灵活性。

阻塞IO VS 非阻塞IO

阻塞IO,当线程调用read()或write()时,该线程将被阻塞,直到数据被读取,或者数据被完全写入。线程在此期间不能做其他任何事情。

Java NIO的非阻塞模式允许线程请求从通道读取数据,并且只获取当前可用的数据,或者如果当前没有数据可用,则什么也得不到。线程可以继续执行其他操作,而不是一直阻塞,直到数据可供读取为止。
非阻塞IO写入也是这样。线程可以请求将一些数据写入通道,但不用等待它完全写入。线程可以继续执行其他操作。

参考资料

1.Netty权威指南(第2版)
2.Java NIO vs. IO
3.Java NIO Programming Cookbook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值