Java 字节缓冲和部分写入

Java 字节缓冲和部分写入,java,nio,Java,Nio,如果ByteBuffer被部分写入,则位置将被更新,下一个\u频道。write呼叫将从上一个位置恢复,是吗 compact()不是必需的吗 private AsynchronousSocketChannel _channel; private ByteBuffer _buffer; final CompletionHandler<Integer, LogstashClientStream> _writeCompletionHandler = new CompletionHandle

如果
ByteBuffer
被部分写入,则
位置将被更新,下一个
\u频道。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){
        //...
    }
}
专用异步socketchannel\u通道;
专用ByteBuffer缓冲区;
final CompletionHandler\u writeCompletionHandler=new CompletionHandler(){
@凌驾
公共void已完成(已发送整数,LogstashClientStream self){
如果(_buffer.remaining()==0){
_buffer.clear();
//...
}                       
否则{
//部分写入
self.send();
}
}
@凌驾
public void失败(可丢弃的exc、LogstashClientStream self){
//...
}
};
私有无效发送(){
试一试{
_写入(_buffer,this,_writeCompletionHandler);
}捕获(可丢弃的e){
//...
}
}

是,它将继续,否,
compact()
在这里是不必要的。在再次调用
write()
之前,它主要用于从某些输入流填充缓冲区的其余部分。

有什么问题?代码是否有效?如果没有,那么什么东西没有按预期工作?