NIO

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

LOGONIOJAVANEWIOContentsNIO简介缓冲区通道selector机制,非阻塞I/O4123NIO简介I/O输入/输出以流的方式NIO是以块的方式,块I/O的效率可以比流I/O高许多。NIO的创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。通道和缓冲区缓冲区:Buffer,数据都是用缓冲区处理对数据的结构化访问通道:channel,相当于IO中的流,双向的。数据缓冲区:状态变量,访问方法当前读取下一个元素位置的索引还有多少数据需要取出,或者还有多少空间可以放入数据存储在缓冲区的最大数据容量put()get()positionlimitcapacity访问方法将一个现有的数组转换为缓冲区:bytearray[]=newbyte[1024];ByteBufferbuffer=ByteBuffer.wrap(array);allocate()来分配缓冲区:ByteBufferbuffer=ByteBuffer.allocate(1024)slice()创建子缓冲区,子缓冲区的数据和原缓冲区的一部分数据共享缓冲区的分配和包装缓冲区的分片和数据共享缓冲区处理直接缓冲区另一种有用的ByteBuffer是直接缓冲区。直接缓冲区是为加快I/O速度,而以一种特殊的方式分配其内存的缓冲区。实际上,直接缓冲区的准确定义是与实现相关的。Sun的文档是这样描述直接缓冲区的:给定一个直接字节缓冲区,Java虚拟机将尽最大努力直接对它执行本机I/O操作。也就是说,它会在每一次调用底层操作系统的本机I/O操作之前(或之后),尝试避免将缓冲区的内容拷贝到一个中间缓冲区中(或者从一个中间缓冲区中拷贝数据)。内存映射文件内存映射文件I/O是一种读和写文件数据的方法,它可以比常规的基于流或者基于通道的I/O快得多。文件锁定文件锁定初看起来可能让人迷惑。它似乎指的是防止程序或者用户访问特定文件。事实上,文件锁就像常规的Java对象锁―它们是劝告式的(advisory)锁。它们不阻止任何形式的数据访问,相反,它们通过锁的共享和获取赖允许系统的不同部分相互协调。您可以锁定整个文件或者文件的一部分。如果您获取一个排它锁,那么其他人就不能获得同一个文件或者文件的一部分上的锁。如果您获得一个共享锁,那么其他人可以获得同一个文件或者文件一部分上的共享锁,但是不能获得排它锁。文件锁定并不总是出于保护数据的目的。例如,您可能临时锁定一个文件以保证特定的写操作成为原子的,而不会有其他程序的干扰。大多数操作系统提供了文件系统锁,但是它们并不都是采用同样的方式。有些实现提供了共享锁,而另一些仅提供了排它锁。事实上,有些实现使得文件的锁定部分不可访问,尽管大多数实现不是这样的。selector机制,非阻塞I/O传统Server/Client模式:TPR(ThreadperRequest)selector机制,非阻塞I/O非阻塞I/O:NIO中非阻塞I/O采用了基于Reactor模式的工作方式,I/O调用不会被阻塞,相反是注册感兴趣的特定I/O事件,如可读数据到达,新的套接字连接等等,在发生特定事件时,系统再通知我们。NIO中实现非阻塞I/O的核心对象就是Selector,Selector就是注册各种I/O事件地方,而且当那些事件发生时,就是这个对象告诉我们所发生的事件,如下图所示:selector机制,非阻塞I/O使用NIO中非阻塞I/O编写服务器处理程序,大体上可以分为下面三个步骤:1.向Selector对象注册感兴趣的事件2.从Selector中获取感兴趣的事件3.根据不同的事件进行相应的处理LOGOThankYou!byguqiqi

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功