知识大全 Java I/O API之性能分析 (下)
Posted 知
篇首语:宁给好汉拉马,不给懒汉作爷。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java I/O API之性能分析 (下)相关的知识,希望对你有一定的参考价值。
Java I/O API之性能分析 (下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
四 注册与处理过程详解 接下来我们要分析Connection的register()方法 前面我们总是说用Selector注册的连接 其实这是一种简化的说法 实际上 用Selector注册的是一个java nio channels SocketChannel对象 但只针对特定的I/O操作 注册之后 有一个java nio channels SelectionKey被返回 这个选择键可以通过attach()方法关联到任意对象 为了通过键获得连接 这里把Connection对象关联到键 这样 我们就可以从Selector间接地获得一个Connection public void register(Selector selector) throws IOException key = socketChannel register(selector SelectionKey OP_READ); key attach(this); 回过头来看ConnectionSelector select()方法的返回值表示有多少连接已经做好了I/O操作的准备 如果返回值是 则返回 否则 调用selectedKeys()获得键的集合(Set) 从这些键获得以前关联的Connection对象 然后调用其readRequest()或writeResponse()方法 具体调用哪一个方法由连接被注册为读取操作还是写入操作决定 现在再来看Connection类 Connection类代表着连接 处理所有协议有关的细节 在构造函数中 通过参数传入的SocketChannel被设置成非阻塞模式 这对于服务器来说是很重要的 另外 构造函数还设置了一些默认值 分配了缓冲区requestLineBuffer 由于分配直接缓冲区代价稍高 且这里的每一个连接都用一个新的缓冲区 因此这里使用java nio ByteBuffer allocate()而不是ByteBuffer allocateDirect() 如果重用缓冲区 直接缓冲区可能具有更高的效率 public Connection(SocketChannel socketChannel) throws IOException this socketChannel = socketChannel; nfigureBlocking(false); requestLineBuffer = ByteBuffer allocate( ); 完成所有初始化工作且SocketChannel做好了读取准备之后 ConnectionSelector调用了readRequest()方法 利用socketChannel read(requestLineBuffer)方法把所有可用的数据读入缓冲区 如果不能读取完整的行 则返回发出调用的ConnectionSelector 允许另一个连接进入处理过程 反之 如果成功地读取了整个行 接下来应该做的是象在Httpd中一样解析请求 如果当前的请求合法 程序为请求目标文件创建一个java nio Channels FileChannel 并调用prepareForResponse()方法 private void prepareForResponse() throws IOException StringBuffer responseLine = new StringBuffer( ); responseLineBuffer = ByteBuffer wrap( responseLine toString() getBytes( ASCII ) ); key interestOps(SelectionKey OP_WRITE); key selector() wakeup(); cha138/Article/program/Java/gj/201311/27638相关参考
分析JavaI/O的工作机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 网络I/O优化 网
高级图像处理图像I/OAPIRC1.0 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如果你对图
JavaI/O流 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 面向字节的流类 一预定义的流对
知识大全 Java I/O 包中的Decorator模式介绍
JavaI/O包中的Decorator模式介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!JDK
首先了解下所谓的javanio是个什么东西! 传统的并发型服务器设计是利用阻塞型网络I/O以多线程的模式来实现的然而由 于系统常常在进行网络读写时处于阻塞状态会大大影响系统的性能自Java开始
调整JavaTMI/O性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 调整JavaTMI/O
Java网络编程从入门到精通(31):非阻塞I/O简介 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Java网络编程从入门到精通(32):一个非阻塞I/O的例子 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
Java网络编程从入门到精通(33):非阻塞I/O的缓冲区(Buffer) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我
测量磁盘I/O 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我怎样分离OracleI/O来使得性能