Java的NIO
2016-04-14 20:20
441 查看
从JDK1.4开始,Java提供的java.nio.*包中,通过采用更接近操作系统IO的方式—通道和缓冲器,
提高了IO的速度,这里总结一二。
从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应用到网络IO中,就形成了高效的网络非阻塞IO,SocketChannel和ServerSocketChannel。
最基本的体现这里的非阻塞特性的方式,是在server端采用单线程即可完成多个客户端的连接请求和数据处理,尽管这样做的效率可能要低于给每个客户端请求开一个线程的方式。
server端采用将channel注册到指定的selector中,然后通过selector监控各个注册channel的状态,这里的监控过程可能需要服务器轮询,所以这里其实也是一种同步的通信方式,只不过是非阻塞的,提高了运转的效率。
这里相当于是一种IO多路复用模型,和操作系统中的多路IO复用系统调用方式select很像。
参考资料:《Java网络编程》
《Java编程思想》
提高了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编程思想》
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- spymemcached源码中Reactor模式分析
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序