Java的NIO

从JDK1.4开始,Java提供的java.nio.*包中,通过采用更接近操作系统IO的方式—通道和缓冲器,
提高了IO的速度,这里总结一二。

FileChannel与ByteBuffer

  • 基本操作方式:
    从FileInputStream/FileOutputStream的getChannel来获得对应的FileChannel,然后通过FileChannel.write(ByteBuffer)以及FileChannel.read(ByteBuffer)来进行读写。
    ByteBuffer的内部结构:三个关键游标,position,limit,capacity。
    flip():用于从ByteBuffer中读取,limit = 原position, position = 0
    clear(): 用于写入ByteBuffer, position置零, limit = capacity。

  • 获取基本类型,asCharBuffer(), asShortBuffer(), asIntBuffer()。
    视图缓冲器。

  • 内存映射文件:MappedByteBuffer, 创建和修改由于尺寸太大而不能放入内存的文件。

NIO和select(),IO多路复用模型

  • 网络编程中利用NIO
    将上述NIO应用到网络IO中,就形成了高效的网络非阻塞IO,SocketChannel和ServerSocketChannel。
    最基本的体现这里的非阻塞特性的方式,是在server端采用单线程即可完成多个客户端的连接请求和数据处理,尽管这样做的效率可能要低于给每个客户端请求开一个线程的方式。
    server端采用将channel注册到指定的selector中,然后通过selector监控各个注册channel的状态,这里的监控过程可能需要服务器轮询,所以这里其实也是一种同步的通信方式,只不过是非阻塞的,提高了运转的效率。
    这里相当于是一种IO多路复用模型,和操作系统中的多路IO复用系统调用方式select很像。

参考资料:《Java网络编程》
《Java编程思想》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值