ByteBuffer

1.  allocate ​服务端接收不到OP_READ事件问题

ByteBuffer byteBuffer = ByteBuffer.allocate(length);

...............................

sc.write(byteBuffer);

通过allocate创建的ByteBuffer,需要调用下filp()方法,不调用,Server端就监听不到本次write的OP_READ事件


ByteBuffer byteBuffer = ByteBuffer.wrap("welcome".getBytes());

通过wrap方法创建的ByteBuffer,没有这个问题


2. filp后没数据可读问题

public final Buffer flip() {
limit = position;
position = 0;
mark = -1;
return this;
}



public final boolean hasRemaining() {
return position < limit;
}

看filp源码,多次调用后,limit会被设置0 

然后调用hasRemaining,就会返回false,没有数据可读

nio-ByteBuffer碰到的问题_服务端