`

NIO

    博客分类:
  • NIO
 
阅读更多

转:http://xzc520.iteye.com/blog/780619

使用nio原因 对于即时消息,线程池的大小会限制系统同时服务的客户端总数。增加线程池大小,会带来更多线程处理开销,而不能提升系统的性能。再者很难实现什么时候对哪个线程将获得服务进行控制。

通常情况accept()方法会造成阻塞等待,直到有新的连接请求来或者计时器超时。 这种方法会要求我们不断地轮询所有IO源,这种忙等会引用很多系统开销。

我们需要一种方法来一次轮询一组客户端,以查找哪个客户端需要服务。Selector Channel为一次处理多个客户端的系统开销提供了更高级的控制和可预测性,Buffer则提供了比Stream抽象更高效和可控的I/O;

TCP协议 ServerSocketChannel  SocketChannel

客户端 

 a)指定要访问的 服务端地址和端口 

 b)创建一个通信信道并指定其为非阻塞特性。

  SocketChannel sc = SocketChannel.open();

sc.configureBlocking(false); 

        c)连接 信道连接 

   d)利用ByteBuffer 发送数据

   e)关闭连接。

服务端

 a)创建选择器(Selector)

 b)创建服务端信道(ServerSocketChannel )

  c)绑定信道监听的端口 socket().bind(new InetSocketAddress(port))

  d)设置非阻塞特性

 e)将选择器注册到要监听的信息上,并指定要操作的类型。

     f)循环 找到一个可用的信道,并得到所有信息相关的兴趣操作集,对不同的操作集请求做与之相应的操作。

Buffer

  nio来编写网络程序时,数据的读写都要经过缓冲区,它是大小是确定的。缓冲区的内部状态由四个索引来表示

capacity position limit mark

positionlimit之间的距离指示了可读取、存入的字节数。0<=mark<=position<=limit<=capacity

创建Buffer

利用Buffer存储和接收数据

缓冲字节的顺序

clear() flip() rewind()等方法使用 对Buffer数据进行压缩透视 

具体用法参考api文档。

字符编码

       Charset类 java.nio.charset包,参看api文档

 

通信信道

       SocketChannel

              创建连接关闭读与写。

       ServerSocketChannel

    创建接收关闭

设置成非阻塞特性

测试连接

用法参看api文档与源码

Selector

  创建关闭

 

在信息中注册Selector,并指定兴趣操作集

SelectionKey

                    SocketChannel 读写连接 OP_CONNECT  OP_READ  OP_WRITE

                      ServerSocketChannel   OP_ACCEPT

                        DatagramChannel 读写 OP_READ  OP_WRITE

SelectionKey 获取与取消

 

选取和识别准备就绪的信道

select()方法用于从已经注册的信道中返回在感兴趣的IO操作集上准备就绪的信息总数。对于每个选择器都已经维护好了一个已选键集,与这些键集关联的信道都有即将发生的特定IO操作。

keys() 当前已经注册的所有键,而且不可以修改。

selectedkeys() 返回上次调用select()方法时,被选中的已经准备好进行IO操作的键。

所选的键集指示了哪些信道当前可以进行IO操作。对于选中的每个信道,我们需要知道它们各自准备好的特定IO操作。除了兴趣操作集外,每个键还维护了一个即将进行的IO操作集,称为就绪操作集(ready set;int readyOps() Boolean isAcceptable() Boolean isConnectable() Boolean isReadalbe() Boolean isValid() Boolean isWritable()

  

  信道附件

在接收发送信息时需要维护信道的状态信息,可以通过

attachment()

attach(Object ob)

 

使用Selector 小结

a)       创建一个Selector实例

b)      将其注册到各种信道,指定每个信道上感兴趣的IO操作。

c)       重复执行:

1.       调用一种select方法 

2.       获取选取的键列表

3.       对于已选键集中的每个键

   获取信道,并从键中获取附件

确定准备就绪的操作并执行。如果是accept操作,将接受的信道设置为非阻塞模式,并将其与选择器注册。

   如果需要,修改键的兴趣操作集

   从已选键集中移除键

      

DatagramChannel

  创建,连接,关闭 基本上和TCP的一样 。。。。。。

分享到:
评论

相关推荐

    xnio-nio-3.8.0.Final-API文档-中文版.zip

    赠送jar包:xnio-nio-3.8.0.Final.jar; 赠送原API文档:xnio-nio-3.8.0.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.0.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.0.Final.pom; 包含翻译后的API...

    JAVA NIO 按行读取大文件,支持 GB级别

    设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理...

    httpcore-nio-4.4.6-API文档-中文版.zip

    赠送jar包:httpcore-nio-4.4.6.jar 赠送原API文档:httpcore-nio-4.4.6-javadoc.jar 赠送源代码:httpcore-nio-4.4.6-sources.jar 包含翻译后的API文档:httpcore-nio-4.4.6-javadoc-API文档-中文(简体)版.zip ...

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    java nio中文版

    java NIO是 java New IO 的简称,在 jdk1.4 里提供的新 api 。 Sun 官方标榜的特性如下: – 为所有的原始类型提供 (Buffer) 缓存支持。 – 字符集编码解码解决方案。 – Channel :一个新的原始 I/O 抽象。 – 支持...

    Java IO, NIO and NIO.2 原版pdf by Friesen

    New I/O (NIO), and NIO.2 categories. You learn what each category offers in terms of its capabilities, and you also learn about concepts such as paths and Direct Memory Access. Chapters 2 through 5 ...

    JAVA NIO 按行读取大文件支持 GB级别-修正版

    设计思想: 每次通过nio读取字节到 fbb中 然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 ...

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    Java IO, NIO and NIO.2(Apress,2015)

    Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...

    java nio 包读取超大数据文件

    Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...

    java基于NIO实现Reactor模型源码.zip

    java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...

    java NIO 视频教程

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...

    新输入输出NIO

    JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的知识,并...

    nio入门 IBM教材,pdf格式

    新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的。NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的、面向块的 I/O。通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本机代码就...

    Java NIO英文高清原版

    Java NIO英文高清原版

    尚硅谷Java视频_NIO 视频教程

    尚硅谷_NIO_NIO 与 IO 区别 ·02. 尚硅谷_NIO_缓冲区(Buffer)的数据存取 ·03. 尚硅谷_NIO_直接缓冲区与非直接缓冲区 ·04. 尚硅谷_NIO_通道(Channel)的原理与获取 ·05. 尚硅谷_NIO_通道的数据传输与内存映射文件 ...

    httpcore-nio-4.4.15-API文档-中文版.zip

    赠送jar包:httpcore-nio-4.4.15.jar 赠送原API文档:httpcore-nio-4.4.15-javadoc.jar 赠送源代码:httpcore-nio-4.4.15-sources.jar 包含翻译后的API文档:httpcore-nio-4.4.15-javadoc-API文档-中文(简体)版....

    java NIO.zip

    java NIO.zip

    xnio-nio-3.8.4.Final-API文档-中文版.zip

    赠送jar包:xnio-nio-3.8.4.Final.jar; 赠送原API文档:xnio-nio-3.8.4.Final-javadoc.jar; 赠送源代码:xnio-nio-3.8.4.Final-sources.jar; 赠送Maven依赖信息文件:xnio-nio-3.8.4.Final.pom; 包含翻译后的API...

Global site tag (gtag.js) - Google Analytics