@Contract(threading=SAFE_CONDITIONAL) public class SharedOutputBuffer extends ExpandableBuffer implements ContentOutputBuffer
ContentOutputBuffer interface that can be
shared by multiple threads, usually the I/O dispatch of an I/O reactor and
a worker thread.
The I/O dispatch thread is expected to transfer data from the buffer to
ContentEncoder by calling produceContent(ContentEncoder).
The worker thread is expected to write data to the buffer by calling
write(int), write(byte[], int, int) or writeCompleted()
In case of an abnormal situation or when no longer needed the buffer must be
shut down using shutdown() method.
| Modifier and Type | Field and Description |
|---|---|
private java.util.concurrent.locks.Condition |
condition |
private boolean |
endOfStream |
private IOControl |
ioctrl |
private java.util.concurrent.locks.ReentrantLock |
lock |
private boolean |
shutdown |
buffer, INPUT_MODE, OUTPUT_MODE| Constructor and Description |
|---|
SharedOutputBuffer(int buffersize) |
SharedOutputBuffer(int buffersize,
ByteBufferAllocator allocator) |
SharedOutputBuffer(int buffersize,
IOControl ioctrl,
ByteBufferAllocator allocator)
Deprecated.
|
| Modifier and Type | Method and Description |
|---|---|
int |
available()
Returns available capacity of this buffer.
|
int |
capacity()
Returns the total capacity of this buffer.
|
void |
close() |
void |
flush() |
private void |
flushContent() |
boolean |
hasData()
Determines if the buffer contains data.
|
int |
length()
Returns the length of this buffer.
|
int |
produceContent(ContentEncoder encoder)
Deprecated.
|
int |
produceContent(ContentEncoder encoder,
IOControl ioctrl) |
void |
reset()
Resets the buffer by clearing its state and stored content.
|
void |
shutdown() |
void |
write(byte[] b) |
void |
write(byte[] b,
int off,
int len)
Writes
len bytes from the specified byte array
starting at offset off to this buffer. |
void |
write(int b)
Writes the specified byte to this buffer.
|
void |
writeCompleted()
Indicates the content has been fully written.
|
clear, ensureCapacity, expand, getMode, setInputMode, setOutputMode, toStringprivate final java.util.concurrent.locks.ReentrantLock lock
private final java.util.concurrent.locks.Condition condition
private volatile IOControl ioctrl
private volatile boolean shutdown
private volatile boolean endOfStream
@Deprecated
public SharedOutputBuffer(int buffersize,
IOControl ioctrl,
ByteBufferAllocator allocator)
SharedOutputBuffer(int, ByteBufferAllocator)public SharedOutputBuffer(int buffersize,
ByteBufferAllocator allocator)
public SharedOutputBuffer(int buffersize)
public void reset()
ContentOutputBufferreset in interface ContentOutputBufferpublic boolean hasData()
ExpandableBufferhasData in class ExpandableBuffertrue if there is data in the buffer,
false otherwise.public int available()
ExpandableBufferavailable in interface BufferInfoavailable in class ExpandableBufferpublic int capacity()
ExpandableBuffercapacity in interface BufferInfocapacity in class ExpandableBufferpublic int length()
ExpandableBufferlength in interface BufferInfolength in class ExpandableBuffer@Deprecated public int produceContent(ContentEncoder encoder) throws java.io.IOException
produceContent(ContentEncoder, IOControl)ContentOutputBufferContentEncoder.produceContent in interface ContentOutputBufferencoder - content encoder.java.io.IOException - in case of an I/O error.public int produceContent(ContentEncoder encoder, IOControl ioctrl) throws java.io.IOException
java.io.IOExceptionpublic void close()
public void shutdown()
public void write(byte[] b,
int off,
int len)
throws java.io.IOException
ContentOutputBufferlen bytes from the specified byte array
starting at offset off to this buffer.
If off is negative, or len is negative, or
off+len is greater than the length of the array
b, this method can throw a runtime exception. The exact type
of runtime exception thrown by this method depends on implementation.
write in interface ContentOutputBufferb - the data.off - the start offset in the data.len - the number of bytes to write.java.io.IOException - if an I/O error occurs.public void write(byte[] b)
throws java.io.IOException
java.io.IOExceptionpublic void write(int b)
throws java.io.IOException
ContentOutputBufferwrite in interface ContentOutputBufferb - the byte.java.io.IOException - if an I/O error occurs.public void flush()
throws java.io.IOException
flush in interface ContentOutputBufferjava.io.IOExceptionprivate void flushContent()
throws java.io.IOException
java.io.IOExceptionpublic void writeCompleted()
throws java.io.IOException
ContentOutputBufferwriteCompleted in interface ContentOutputBufferjava.io.IOException - if an I/O error occurs.