添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
public abstract class WriteFlusher
extends java.lang.Object
A Utility class to help implement EndPoint.write(Callback, ByteBuffer...) by calling EndPoint.flush(ByteBuffer...) until all content is written. The abstract method onIncompleteFlush() is called when not all content has been written after a call to flush and should organize for the completeWrite() method to be called when a subsequent call to flush should be able to make more progress.
completeWrite ()
Complete a write that has not completed and that called onIncompleteFlush() to request a call to this method when a call to EndPoint.flush(ByteBuffer...) is likely to be able to progress.
protected java.nio.ByteBuffer[] flush ​(java.nio.ByteBuffer[] buffers)
Flushes the buffers iteratively until no progress is made.
Invocable.InvocationType getCallbackInvocationType () boolean isPending () onClose () boolean onFail ​(java.lang.Throwable cause)
Notify the flusher of a failure
protected abstract void onIncompleteFlush ()
Abstract call to be implemented by specific WriteFlushers.
java.lang.String toStateString () java.lang.String toString () write ​( Callback callback, java.nio.ByteBuffer... buffers)
Tries to switch state to WRITING.

onIncompleteFlush

protected abstract void onIncompleteFlush()
Abstract call to be implemented by specific WriteFlushers. It should schedule a call to completeWrite() or onFail(Throwable) when appropriate.
public void write​(Callback callback,
                  java.nio.ByteBuffer... buffers)
           throws java.nio.channels.WritePendingException
Tries to switch state to WRITING. If successful it writes the given buffers to the EndPoint. If state transition fails it will fail the callback and leave the WriteFlusher in a terminal FAILED state. If not all buffers can be written in one go it creates a new PendingState object to preserve the state and then calls onIncompleteFlush() . The remaining buffers will be written in completeWrite() . If all buffers have been written it calls callback.complete().
Parameters:
callback - the callback to call on either failed or complete
buffers - the buffers to flush to the endpoint
Throws:
java.nio.channels.WritePendingException - if unable to write due to prior pending write

completeWrite

public void completeWrite()
Complete a write that has not completed and that called onIncompleteFlush() to request a call to this method when a call to EndPoint.flush(ByteBuffer...) is likely to be able to progress. It tries to switch from PENDING to COMPLETING. If state transition fails, then it does nothing as the callback should have been already failed. That's because the only way to switch from PENDING outside this method is onFail(Throwable) or onClose()

flush

protected java.nio.ByteBuffer[] flush​(java.nio.ByteBuffer[] buffers)
                               throws java.io.IOException
Flushes the buffers iteratively until no progress is made.
Parameters:
buffers - The buffers to flush
Returns:
The unflushed buffers, or null if all flushed
Throws:
java.io.IOException - if unable to flush