Java NIO学习

概述

NIO是一种基于缓存的、非阻塞的异步IO。NIO主要涉及到三个概念:Buffer(缓存),Channel(通道),Selector(选择器)。NIO和传统IO不同在于:NIO是基于缓存的,而传统IO是基于流的,传统IO的数据是从一个出发地流向一个目的地,而NIO的数据是从一个Buffer通过Channel流向另一个Buffer的。这样,线程就可以将IO过程交给Channel去管理,自己可以做其它是,所以NIO也是异步的,非阻塞的,而传统IO在IO过程中必须等待,是同步的,阻塞的。NIO通过Selector可以监听多个Buffer的事件,并响应事件对IO结果进行处理,这样,就可以用一个线程实现监听多个通道,对于单核处理器来说,这会提高性能。总的来说,就是:
(1)NIO是异步的,非阻塞的
(2)NIO是基于缓存的
(3)NIO即可读又可写,是双向的。
(4)NIO提供selector,可以用单线程实现多个通道的监听

Channel

通道用来操作Buffer,通过通道,可以写入数据到Buffer,或者从缓存读取数据。

打开通道
RandomAccessFile file = new RandomAccessFile("d://sample.txt","rw");

FileChannel fileChannel = file.getChannel();

这里打开的是一个FileChannel,当然还有其他类型的通道,参看:Java NIO Channel

Buffer

Buffer是缓存,是一个内存区块,可供channel写入或读取。

创建Buffer
ByteBuffer buffer = ByteBuffer.allocate(48);
切换工作模式

Buffer有两种工作模式“读取”和“写入”,读取之前,要调用filp()切换到读取模式:

//切换到读取模式
buffer.flip();

//读取数据
while(buffer.hasRemaining()){
     char word =(char)buffer1.get();
}

同样,写入之前调用clear()方法,清空buffer数据,准备写入:

buffer.clear();

fileChannel.read(buffer );

Seletor

用来监听多个通道,没用过感触不深,还是看参考文档靠谱!


参考文档:http://tutorials.jenkov.com/ ,非常不错的网站

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值