Java NIO

Java磁盘数据读取模型

数据存在磁盘中,磁盘控制器从磁盘中读取将其放入操作系统内核的缓冲区,然后Java程序从缓冲区中读取数据

 由于现在CPU处理速度的上升,整体的运行速度瓶颈已不在CPU,更多的是由I/O效率决定,而目前市面上所有操作系统已经将I/O性能改善到非常OK不会拖后腿,但由于Java虚拟机为了提供一个多系统统一的环境,其单方面屏蔽了操作系统在I/O上处理的优化。

是JVM在I/O方面效率不足,导致的程序效率降低。在操作系统中,可以从硬件上直接读取大块的数据,而JVM只能从这些大块的里面一小块一小块的读。

在JDK4中引入了NIO,最大限度满足Java的I/O需求。

BIO和NIO的区别

BIO

面向流,每次可以从流中读取一个或多个字节,只能向后读取,不能向前移动

BIO是线程阻塞的,在read() / write()读写数据时,线程阻塞,直到数据读取完毕,在读写过程中,线程只能等,什么也做不了。

NIO

面向缓冲区,把数据读到一个缓冲区,可以在缓冲区中向前、向后移动;

所有数据通过Channel传输,Channel可以直接将一块数据映射到内存中,Channel是双向的,可以读取数据,也能保存数据,Channel只能与Buffer缓冲区交互,不能直接读取数据。

 NIO是线程非阻塞的,当线程从Channel中读取数据时,如果Channel中没有数据,线程不用一直在这等,可以去做别的。

待续

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值