|
|||||||||
| Home >> All >> org >> apache >> http >> [ io overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
org.apache.http.io
Class ChunkedOutputStream

java.lang.Objectjava.io.OutputStream
org.apache.http.io.ChunkedOutputStream
- public class ChunkedOutputStream
- extends java.io.OutputStream
This class implements chunked transfer coding as described in the Section 3.6.1 of RFC 2616. Writes are buffered to an internal buffer (2048 default size). Chunks are guaranteed to be at least as large as the buffer size (except for the last chunk).
The chunked encoding modifies the body of a message in order to transfer it as a series of chunks, each with its own size indicator, followed by an OPTIONAL trailer containing entity-header fields. This allows dynamically produced content to be transferred along with the information necessary for the recipient to verify that it has received the full message.
Chunked-Body = *chunk
last-chunk
trailer
CRLF
chunk = chunk-size [ chunk-extension ] CRLF
chunk-data CRLF
chunk-size = 1*HEX
last-chunk = 1*("0") [ chunk-extension ] CRLF
chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
chunk-ext-name = token
chunk-ext-val = token | quoted-string
chunk-data = chunk-size(OCTET)
trailer = *(entity-header CRLF)
The chunk-size field is a string of hex digits indicating the size of the chunk. The chunked encoding is ended by any chunk whose size is zero, followed by the trailer, which is terminated by an empty line.
The trailer allows the sender to include additional HTTP header fields at the end of the message. The Trailer header field can be used to indicate which header fields are included in a trailer (see section 14.40).
A server using chunked transfer-coding in a response MUST NOT use the trailer for any header fields unless at least one of the following is true:
a)the request included a TE header field that indicates "trailers" is acceptable in the transfer-coding of the response, as described in section 14.39; or,
b)the server is the origin server for the response, the trailer fields consist entirely of optional metadata, and the recipient could use the message (in a manner acceptable to the origin server) without receiving this metadata. In other words, the origin server is willing to accept the possibility that the trailer fields might be silently discarded along the path to the client.
This requirement prevents an interoperability failure when the message is being received by an HTTP/1.1 (or later) proxy and forwarded to an HTTP/1.0 recipient. It avoids a situation where compliance with the protocol would have necessitated a possibly infinite buffer on the proxy.
| Field Summary | |
private byte[] |
cache
|
private int |
cachePosition
|
private boolean |
closed
True if the stream is closed. |
private HttpDataTransmitter |
out
|
private boolean |
wroteLastChunk
|
| Constructor Summary | |
ChunkedOutputStream(HttpDataTransmitter datatransmitter)
Wraps a data transmitter and chunks the output. |
|
ChunkedOutputStream(HttpDataTransmitter out,
int bufferSize)
Wraps a stream and chunks the output. |
|
| Method Summary | |
void |
close()
Finishes writing to the underlying stream, but does NOT close the underlying stream. |
void |
finish()
Must be called to ensure the internal cache is flushed and the closing chunk is written. |
void |
flush()
Flushes the underlying stream, but leaves the internal buffer alone. |
protected void |
flushCache()
Writes the cache out onto the underlying stream |
protected void |
flushCacheWithAppend(byte[] bufferToAppend,
int off,
int len)
Writes the cache and bufferToAppend to the underlying stream as one large chunk |
void |
write(byte[] b)
Writes the array. |
void |
write(byte[] src,
int off,
int len)
This method writes len bytes from the specified array
b starting at index off into the array. |
void |
write(int b)
This method writes a single byte to the output stream. |
protected void |
writeClosingChunk()
|
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
out
private final HttpDataTransmitter out
cache
private byte[] cache
cachePosition
private int cachePosition
wroteLastChunk
private boolean wroteLastChunk
closed
private boolean closed
- True if the stream is closed.
| Constructor Detail |
ChunkedOutputStream
public ChunkedOutputStream(HttpDataTransmitter out, int bufferSize) throws java.io.IOException
- Wraps a stream and chunks the output.
- Since:
- 3.0
ChunkedOutputStream
public ChunkedOutputStream(HttpDataTransmitter datatransmitter) throws java.io.IOException
- Wraps a data transmitter and chunks the output. The default buffer size of 2048 was
chosen because the chunk overhead is less than 0.5%
| Method Detail |
flushCache
protected void flushCache()
throws java.io.IOException
- Writes the cache out onto the underlying stream
- Since:
- 3.0
flushCacheWithAppend
protected void flushCacheWithAppend(byte[] bufferToAppend,
int off,
int len)
throws java.io.IOException
- Writes the cache and bufferToAppend to the underlying stream
as one large chunk
- Since:
- 3.0
writeClosingChunk
protected void writeClosingChunk()
throws java.io.IOException
finish
public void finish()
throws java.io.IOException
- Must be called to ensure the internal cache is flushed and the closing chunk is written.
- Since:
- 3.0
write
public void write(int b)
throws java.io.IOException
- Description copied from class:
java.io.OutputStream - This method writes a single byte to the output stream. The byte written
is the low eight bits of the
intpassed and a argument.Subclasses must provide an implementation of this abstract method
write
public void write(byte[] b)
throws java.io.IOException
- Writes the array. If the array does not fit within the buffer, it is
not split, but rather written out as one large chunk.
- Since:
- 3.0
write
public void write(byte[] src,
int off,
int len)
throws java.io.IOException
- Description copied from class:
java.io.OutputStream - This method writes
lenbytes from the specified arraybstarting at indexoffinto the array.This method in this class calls the single byte
write()method in a loop until all bytes have been written. Subclasses should override this method if possible in order to provide a more efficent implementation.
flush
public void flush()
throws java.io.IOException
- Flushes the underlying stream, but leaves the internal buffer alone.
close
public void close()
throws java.io.IOException
- Finishes writing to the underlying stream, but does NOT close the underlying stream.
|
|||||||||
| Home >> All >> org >> apache >> http >> [ io overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
JAVADOC