public class RepeatableRequestEntity
extends java.lang.Object
implements org.apache.http.HttpEntity
This class works by taking advantage of the reset capability of the original data input stream, or by wrapping the input stream in a reset-able class if it is not so capable.
When data is repeated, any attached ProgressMonitoredInputStream
is notified
that a repeat transmission is occurring.
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_BUFFER_SIZE |
protected static long |
MAX_BYTES_PER_SECOND |
protected boolean |
mChunked |
protected org.apache.http.Header |
mContentEncoding |
Constructor and Description |
---|
RepeatableRequestEntity(java.lang.String name,
java.io.InputStream is,
java.lang.String contentType,
long contentLength,
Jets3tProperties jets3tProperties,
boolean enableLiveMD5Hashing)
Creates a repeatable request entity for the input stream provided.
|
Modifier and Type | Method and Description |
---|---|
void |
consumeContent() |
java.io.InputStream |
getContent() |
org.apache.http.Header |
getContentEncoding() |
long |
getContentLength() |
org.apache.http.Header |
getContentType() |
byte[] |
getMD5DigestOfData() |
boolean |
isChunked() |
boolean |
isRepeatable() |
boolean |
isStreaming() |
protected static void |
throttle(int bytesToWrite)
Throttles the speed at which data is written by this request entity to the
maximum rate in KB/s specified by
MAX_BYTES_PER_SECOND . |
void |
writeTo(java.io.OutputStream out)
Writes the request to the output stream.
|
public static final int DEFAULT_BUFFER_SIZE
protected static long MAX_BYTES_PER_SECOND
protected org.apache.http.Header mContentEncoding
protected boolean mChunked
public RepeatableRequestEntity(java.lang.String name, java.io.InputStream is, java.lang.String contentType, long contentLength, Jets3tProperties jets3tProperties, boolean enableLiveMD5Hashing)
If the input stream provided, or any underlying wrapped input streams, supports the
InputStream.reset()
method then it will be capable of repeating data
transmission. If the input stream provided does not supports this method, it will
automatically be wrapped in a RepeatableInputStream
-- in this case, the data
read from the wrapped input stream will be buffered up to the limit set by the JetS3t
property uploads.stream-retry-buffer-size (default: 131072 bytes).
This constructor also detects when an underlying ProgressMonitoredInputStream
is
present, and will notify this monitor if a repeat occurs.
If the JetS3t properties option httpclient.read-throttle
is set to a
non-zero value, all simultaneous uploads performed by this class will be throttled
to the specified speed.
name
- is
- the input stream that supplies the data to be made repeatable.contentType
- contentLength
- enableLiveMD5Hashing
- if true, data that passes through the object will be hashed to an MD5 digest
and this digest will be available from getMD5DigestOfData()
. If false,
the digest will not be calculated.public org.apache.http.Header getContentEncoding()
getContentEncoding
in interface org.apache.http.HttpEntity
public boolean isChunked()
isChunked
in interface org.apache.http.HttpEntity
public java.io.InputStream getContent()
getContent
in interface org.apache.http.HttpEntity
public void consumeContent()
consumeContent
in interface org.apache.http.HttpEntity
public boolean isStreaming()
isStreaming
in interface org.apache.http.HttpEntity
public long getContentLength()
getContentLength
in interface org.apache.http.HttpEntity
public org.apache.http.Header getContentType()
getContentType
in interface org.apache.http.HttpEntity
public boolean isRepeatable()
isRepeatable
in interface org.apache.http.HttpEntity
writeTo(OutputStream)
method when the repeat is attempted.public void writeTo(java.io.OutputStream out) throws java.io.IOException
InputStream.reset()
.
If a ProgressMonitoredInputStream
is attached, this monitor will be notified that
data is being repeated by being reset with
ProgressMonitoredInputStream.resetProgressMonitor()
.
writeTo
in interface org.apache.http.HttpEntity
out
- java.io.IOException
public byte[] getMD5DigestOfData()
protected static void throttle(int bytesToWrite) throws java.io.IOException
MAX_BYTES_PER_SECOND
. The method
works by repeatedly delaying its completion until writing the requested number
of bytes will not exceed the imposed limit for the current second. The delay
imposed each time the completion is deferred is a random value between 0-250ms.
This method is static and is shared by all instances of this class, so the byte rate limit applies for all currently active RepeatableRequestEntity instances.
bytesToWrite
- the count of bytes that will be written once this method returns.java.io.IOException
- an exception is thrown if the sleep delay is interrupted.