NIO

IO:基于数据流Stream,所有数据都是字节流。

NIO:基于数据块Block,NIO把最耗时是填充和提取缓冲区转到操作系统,从而极大的提升性能。

NIO组成:通道Chanel和缓冲区Buffer。

数据的读写通过Chanel进行,Chanel相对于Stream,但是程序不能直接操作Chanel,而是通过Buffer和Chanel交互。Buffer实质上是一个数组。

Stream是单向的数据流,分InputStream和OutputSteam,Chanel是双向的。

读文件:

1、从FileInputStream中获取Chanel。FileChanel fc = fis.getChanel();

2、创建Buffer,Buffer buffer = Buffer.allocate(1024);

3、从Chanel读取数据到缓冲区,fc.read(buffer);

写文件:

FileOutputStream fout = new FileOutputStream( "writesomebytes.txt" );
FileChannel fc = fout.getChannel();

ByteBuffer buffer = ByteBuffer.allocate( 1024 );
for (int i=0; i<message.length; ++i) {
     buffer.put( message[i] );
}
buffer.flip();

fc.write( buffer );

缓冲区Buffer细节:

缓冲区维护了3个变量:

1、position:当前读写的位置。

2、limit:写数据时:还有多少数据可以写入;读数据时:还有多少剩余空间。

3、capacity:Buffer总长度。

flip()方法:把limit设置为当前position,把position设置为0.

clear()方法:清除Buffer数据,重置position和limit。

直接操作Buffer方法:get方法,5个重载;put方法,5个重载。


数组可以直接wrap为缓冲区。

内存映射文件IO:通过OS的文件内存映射功能,把内存和磁盘文件直接做映射。


异步IO:一种无阻塞的读写数据的方法。传统IO的read和write方法会导致IO堵塞。NIO通过注册事件监听,达到IO无阻塞。

异步IO核心:Selector对象,通过Selector对象注册事件,事件发生时,由Selector对象通知。



异步 I/O 和直接缓冲区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值