繁体   English   中英

ByteBuffer和部分写入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM