吐槽NIO中的slip方法
2016-08-23 19:32
169 查看
在NIO中,如果不调用flip方法,NIO的Buffer就不会提供一个很清楚的方式去指定消息内容的开始位置和结束位置,如下代码所示:
如上,在从buffer中读取数据的时候如果没有调用flip方法,就会有不正确的数据发送,这样让人很困惑。
(具体的buffer使用参见:http://blog.csdn.net/jianjun200607/article/details/50286767)
而基于NIO的网络编程框架Netty就不需要如此,非常方便,正常进行读取就OK,如下代码所示:
ChannelBuffer buffer = ChannelBuffers.buffer(4);
buffer.writeInt(...);
channel.write(buffer);因为在ChannelBuffer中提供了两个指针,一个是提供给读操作的,另外一个是提供给写操作的;当你写一些信息到ChannelBuffer中的时候,这个写的索引就会增加,然而读的不会改变;这个读索引和写索引分别呈现了这个消息的开始和结束位置;而且他用起来确实很简单。
NIO中的flip方法繁琐,容易出问题,而且个人感觉此方法很容易让人疑惑;所以个人不建议直接使用NIO。
Buffer buffer = ...; buffer.flip(); channel.write(buffer);(or buffer.get())
如上,在从buffer中读取数据的时候如果没有调用flip方法,就会有不正确的数据发送,这样让人很困惑。
(具体的buffer使用参见:http://blog.csdn.net/jianjun200607/article/details/50286767)
而基于NIO的网络编程框架Netty就不需要如此,非常方便,正常进行读取就OK,如下代码所示:
ChannelBuffer buffer = ChannelBuffers.buffer(4);
buffer.writeInt(...);
channel.write(buffer);因为在ChannelBuffer中提供了两个指针,一个是提供给读操作的,另外一个是提供给写操作的;当你写一些信息到ChannelBuffer中的时候,这个写的索引就会增加,然而读的不会改变;这个读索引和写索引分别呈现了这个消息的开始和结束位置;而且他用起来确实很简单。
NIO中的flip方法繁琐,容易出问题,而且个人感觉此方法很容易让人疑惑;所以个人不建议直接使用NIO。
相关文章推荐
- java.nio.Buffer flip()方法
- 关于nio的java.nio.channels.CancelledKeyException的解决方法
- JAVA使用EPoll来进行NIO处理的方法(转)
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- jython在eclipse控制台出现Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0解决方法
- java.nio.ByteBuffer的flip、rewind和compact几个方法的区分使用
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- Tomcat在Linux服务器上的BIO、NIO、APR模式设置方法
- java.nio.Buffer 中的 flip()方法
- java.nio.ByteBuffer中flip、rewind、clear方法的区别
- 悲催的IE6 七宗罪大吐槽(带解决方法)第三部分
- NIO中有关Buffer的几种常用方法比如clear,rewind和flip
- 字里行间有学问——从一个方法的吐槽开始,说说几个编码实践
- JAVA-4NIO之Channel之间的数据传输方法
- JAVA NIO 通道Channel的原理与获取方法
- java.nio.BufferOverflowException异常出现原因及解决方法
- Nio 中的方法 - 文件上传
- NIO ByteBuffer 使用方法
- Java NIO之Buffer中flip()、rewind()、clear()方法解析
- nio快速文件复制方法