您的位置:首页 > 编程语言 > Java开发

Java的NIO

2016-04-14 20:20 441 查看
从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编程思想》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nio java jdk