我们在使用JAVA NIO发送消息时不是常常需要调用ByteBuffer.flip()方法吗?
实际上ChannelBuffer之所以不需要这个方法是因为 ChannelBuffer有两个指针:
一个对应读操作,一个对应写操作。
当你向一个 ChannelBuffer写入数据的时候写指针的索引值便会增加,但与此同时读指针的索引值不会有任何变化。
读写指针的索引值分别代表了这个消息的开始、结束位置。
与之相应的是,NIO的buffer缓冲没有为我们提供如此简洁的一种方法,除非你调用它的flip方法。
因此,当你忘记调用flip方法而引起发送错误时,你便会陷入困境。这样的错误不会再Netty中发生,因为我们对应不同的操作类型有不同的指针。你会发现就像你已习惯的这样过程变得更加容易— 一种没有flippling的体验!