[英]ByteBuffer and partial write
如果部分写入ByteBuffer
,则position
会更新,下一个_channel.write
调用将从上一个位置恢复,是吗?
compact()
不是必需的吗?
private AsynchronousSocketChannel _channel;
private ByteBuffer _buffer;
final CompletionHandler<Integer, LogstashClientStream> _writeCompletionHandler = new CompletionHandler<Integer, LogstashClientStream>(){
@Override
public void completed(Integer sent, LogstashClientStream self) {
if( _buffer.remaining() == 0 ){
_buffer.clear();
//...
}
else {
// partial write
self.send();
}
}
@Override
public void failed(Throwable exc, LogstashClientStream self) {
//...
}
};
private void send(){
try{
_channel.write( _buffer, this, _writeCompletionHandler);
} catch(Throwable e){
//...
}
}
是的,它将恢复,并且不,在这里不需要compact()
。 它主要在您要在再次调用write()
之前从某些输入流填充其余缓冲区的情况下很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.