
基于前文对 NIO Selector 消息边界处理、compact() 缓冲区管理及粘包/拆包逻辑的讨论,容量超出(Buffer Overflow) 通常发生在客户端发送的数据量超过了服务端预设的 ByteBuffer 容量,或者由于协议解析错误导致缓冲区无法及时释放空间。效果演示:服务端代码packagecom.example.demo;importlombok.extern.slf4j.Slf4j;importjava.io.IOException;importjava.net.InetSocketAddress;importjava.nio.ByteBuffer;importjava.nio.channels.SelectionKey;importjava.nio.channels.Selector;importjava.nio.channels.ServerSocketChannel;importjava.nio.channels.SocketChannel;importjava.nio.charset.Charset;importjava.util.Iterator;importjava.util.Set;importstaticcom.example.demo.ByteBufferSticky.traversal;@Slf4jpublicclassSelectorMessageTest{publicstaticvoidmain(String[]args)throwsIOException{Selectorselector=Selector.open();ServerSocketChannelssc=ServerSocketChannel.open();ssc.bind(new