T
- the type of message that will be written; see createMessage(byte[], int, int)
public abstract class AbstractChannelOutboundInvokingOutputStream<T> extends OutputStream
OutputStream
that delegates writing and flushing
operations to a ChannelOutboundInvoker
.
Instances of this class are safe for concurrent use by multiple threads.
ChannelOutboundInvoker
Modifier and Type | Field and Description |
---|---|
protected ChannelOutboundInvoker |
channelOutboundInvoker
The
ChannelOutboundInvoker underlying this AbstractChannelOutboundInvokingOutputStream implementation to
which most operations are adapted. |
protected boolean |
closeChannelOutboundInvoker
|
Modifier | Constructor and Description |
---|---|
protected |
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker channelOutboundInvoker)
Creates a new
AbstractChannelOutboundInvokingOutputStream
that does not automatically flush and that does not ever
close the supplied
ChannelOutboundInvoker . |
protected |
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker channelOutboundInvoker,
boolean closeChannelOutboundInvoker)
Creates a new
AbstractChannelOutboundInvokingOutputStream
that does not automatically flush. |
protected |
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker channelOutboundInvoker,
int flushThreshold,
boolean closeChannelOutboundInvoker)
Creates a new
AbstractChannelOutboundInvokingOutputStream . |
Modifier and Type | Method and Description |
---|---|
void |
close()
Closes this
AbstractChannelOutboundInvokingOutputStream , optionally
writing and flushing a final message, or simply just flushing first, before possibly closing the
underlying ChannelOutboundInvoker . |
protected T |
createLastMessage()
Returns a new, possibly
null , message that should be
written when close() is invoked. |
protected abstract T |
createMessage(byte[] bytes,
int offset,
int length)
Returns a new message representing a portion (or all) of the
supplied
byte array that will be written by
this AbstractChannelOutboundInvokingOutputStream 's
various write methods. |
protected T |
createMessage(int singleByte)
Returns a new message representing the single supplied
byte to be written by this AbstractChannelOutboundInvokingOutputStream 's various write methods. |
void |
flush()
Calls the
ChannelOutboundInvoker.flush() method on the
ChannelOutboundInvoker supplied at construction time. |
int |
getFlushThreshold()
Returns the minimum number of bytes that this
AbstractChannelOutboundInvokingOutputStream implementation has
to write before an
automatic flush will take place. |
protected ChannelPromise |
newPromise()
Creates and returns new
ChannelPromise s that will be used
in many ChannelOutboundInvoker operations. |
void |
write(byte[] bytes) |
void |
write(byte[] bytes,
int offset,
int length) |
void |
write(int singleByte) |
protected final ChannelOutboundInvoker channelOutboundInvoker
ChannelOutboundInvoker
underlying this AbstractChannelOutboundInvokingOutputStream
implementation to
which most operations are adapted.protected final boolean closeChannelOutboundInvoker
protected AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker channelOutboundInvoker)
AbstractChannelOutboundInvokingOutputStream
that does not automatically flush and that does not ever
close the supplied
ChannelOutboundInvoker
.channelOutboundInvoker
- the ChannelOutboundInvoker
to which operations are adapted; must not be null
NullPointerException
- if channelOutboundInvoker
is null
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker,
int, boolean)
,
ChannelOutboundInvoker
protected AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker channelOutboundInvoker, boolean closeChannelOutboundInvoker)
AbstractChannelOutboundInvokingOutputStream
that does not automatically flush.channelOutboundInvoker
- the ChannelOutboundInvoker
to which operations are adapted; must not be null
closeChannelOutboundInvoker
- whether ChannelOutboundInvoker.close(ChannelPromise)
will be called on
the supplied ChannelOutboundInvoker
when close()
is calledNullPointerException
- if channelOutboundInvoker
is null
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker,
int, boolean)
,
ChannelOutboundInvoker
,
close()
protected AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker channelOutboundInvoker, int flushThreshold, boolean closeChannelOutboundInvoker)
AbstractChannelOutboundInvokingOutputStream
.channelOutboundInvoker
- the ChannelOutboundInvoker
to which operations are adapted; must not be null
flushThreshold
- the minimum number of bytes that this
instance has to write
before an automatic flush will take place;
if less than 0
0
will be used instead; if Integer#MAX_VALUE
then no automatic flushing will occurcloseChannelOutboundInvoker
- whether ChannelOutboundInvoker.close(ChannelPromise)
will be called on
the supplied ChannelOutboundInvoker
when close()
is calledNullPointerException
- if channelOutboundInvoker
is null
ChannelOutboundInvoker
,
getFlushThreshold()
,
close()
public final int getFlushThreshold()
AbstractChannelOutboundInvokingOutputStream
implementation has
to write before an
automatic flush will take place.
This method will always return 0
or a positive int
.
If this method returns 0
, then a call to flush()
will be made at some point after every write(byte[], int, int)
invocation.
If this method returns Integer.MAX_VALUE
, then no
automatic flushing will occur.
AbstractChannelOutboundInvokingOutputStream
implementation has
to write before an
automatic flush will take place; always
0
or a positive int
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker,
int, boolean)
,
ChannelOutboundInvoker.flush()
public final void write(int singleByte) throws IOException
write
in class OutputStream
IOException
public final void write(byte[] bytes) throws IOException
write
in class OutputStream
IOException
public final void write(byte[] bytes, int offset, int length) throws IOException
write
in class OutputStream
IOException
protected T createMessage(int singleByte) throws IOException
byte
to be written by this AbstractChannelOutboundInvokingOutputStream
's various write
methods.
This method never returns null
.
Overrides of this method must not return null
.
Note: The default implementation of this
method is inefficient: it creates a new byte[]
holding
the sole byte
represented by the singleByte
parameter value and calls createMessage(byte[], int,
int)
and returns its result. Subclasses are encouraged, but not
required, to override this method to be more efficient.
Overrides of this method should be stateless.
singleByte
- an int
whose low-order bits hold a
byte
to be writtennull
message to writeIOException
- if an error occurscreateMessage(byte[], int, int)
,
ChannelOutboundInvoker.write(Object, ChannelPromise)
protected abstract T createMessage(byte[] bytes, int offset, int length) throws IOException
byte
array that will be written by
this AbstractChannelOutboundInvokingOutputStream
's
various write
methods.
Implementations of this method must not return null
.
Implementations of this method should be stateless.
bytes
- a byte
array originating from,
e.g., a write(byte[], int, int)
method
invocation; will never be null
offset
- the (validated) offset within the supplied byte
array from which to start reading; will always be 0
or a positive int
less than length
length
- the (validated) length of the portion to read; will
always be 0
or a positive int
less than or equal
to the length
of the supplied byte
arraynull
message to writeNullPointerException
- if bytes
is null
IndexOutOfBoundsException
- if offset
is
negative, or length
is negative, or offset +
length
is greater than the length of bytes
IOException
- if an error occurs during the actual
creation of the messagewrite(byte[], int, int)
,
OutputStream.write(byte[], int, int)
,
ChannelOutboundInvoker.write(Object, ChannelPromise)
protected T createLastMessage() throws IOException
null
, message that should be
written when close()
is invoked.
This method and its overrides may return null
to
indicate that no such write is required.
The default implementation of this method returns null
.
Overrides of this method should be stateless.
close()
is
called, or null
if no final message needs to be writtenIOException
- if an error occursclose()
protected ChannelPromise newPromise()
ChannelPromise
s that will be used
in many ChannelOutboundInvoker
operations.
This method never returns null
.
Overrides of this method must not return null
.
The default implementation of this method returns the return
value of invoking ChannelOutboundInvoker.newPromise()
.
null
ChannelPromise
that will
be supplied to many ChannelOutboundInvoker
operationsChannelPromise
,
ChannelOutboundInvoker.newPromise()
,
ChannelOutboundInvoker.voidPromise()
public final void flush()
ChannelOutboundInvoker.flush()
method on the
ChannelOutboundInvoker
supplied at construction time.flush
in interface Flushable
flush
in class OutputStream
ChannelOutboundInvoker.flush()
,
getFlushThreshold()
,
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker,
int, boolean)
public final void close() throws IOException
AbstractChannelOutboundInvokingOutputStream
, optionally
writing and flushing a final message, or simply just flushing first, before possibly closing the
underlying ChannelOutboundInvoker
.close
in interface Closeable
close
in interface AutoCloseable
close
in class OutputStream
IOException
- if the createLastMessage()
method
throws an IOException
createLastMessage()
,
ChannelOutboundInvoker.close(ChannelPromise)
,
AbstractChannelOutboundInvokingOutputStream(ChannelOutboundInvoker,
int, boolean)
Copyright © 2019–2020, microBean™. All rights reserved.