|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object java.io.InputStream com.levigo.jadice.document.io.SeekableInputStream com.levigo.jadice.document.io.HTTPRangeRequestStream
public class HTTPRangeRequestStream
A SeekableInputStream
which uses HTTP Range Requests as specified in
RFC7233 in order to provide efficient random
access to resources available through a range-request-capable HTTP server.
Accessing resources on servers which do not support range requests is possible but in most cases
horribly inefficient. A warning is issued, if a server does not support range requests. The
property setFailOnUnsupportedRangeRequest(boolean)
may be set to true
in
order to cause an explicit failure in this situation.
It is not recommended to use this stream implementation directly as a source for document data.
Access patterns with frequent seeks and small request sizes (may) lead to frequent HTTP
reconnects. Instead, please consider wrapping this stream in caching streams supporting random
access like the BufferManagerInputStream
.
Field Summary |
---|
Fields inherited from class com.levigo.jadice.document.io.SeekableInputStream |
---|
bitOffset, byteOrder, flushedPos |
Constructor Summary | |
---|---|
HTTPRangeRequestStream(URL url)
Create a stream for a resource at the given URL for which the length is not already known. |
|
HTTPRangeRequestStream(URL url,
long length)
Create a stream for a resource at the given URL which is known to have the given length. |
Method Summary | |
---|---|
long |
getRangeRequestSize()
Get the length of the range request to issue. |
long |
getReopenForwardThreshold()
Get the threshold beyond which we re-open a connection if the current (seek) position is after the current stream position. |
long |
getSizeEstimate()
A rough estimated size for this stream instance, which is used for internal cache management. |
long |
getStreamPosition()
|
boolean |
isFailOnUnsupportedRangeRequest()
Return whether the transfer will fail if the target HTTP service does not support range requests ( true ) or fall back to plain streaming transfer (false ). |
long |
length()
Returns the length of this stream contents, if available. |
int |
read()
Reads a single byte from the stream and returns it as an int between 0 and 255. |
int |
read(byte[] b,
int off,
int len)
Reads up to len bytes from the stream, and stores them into b
starting at index off . |
void |
seek(long pos)
Sets the current stream position, measured from the beginning of this data stream, at which the next read occurs. |
void |
setFailOnUnsupportedRangeRequest(boolean failOnUnsupportedRangeRequest)
Set whether to fail if the target HTTP service does not support range requests ( true ) or to fall back to plain streaming transfer (false ). |
void |
setRangeRequestSize(long rangeRequestSize)
Set the length of the range request to issue. |
void |
setReopenForwardThreshold(long reopenForwardThreshold)
Set the threshold beyond which we re-open a connection if the current (seek) position is after the current stream position. |
Methods inherited from class com.levigo.jadice.document.io.SeekableInputStream |
---|
checkClosed, close, finalize, flush, flushBefore, getBitOffset, getByteOrder, getFlushedPosition, isCached, isCachedFile, isCachedMemory, mark, mark, read, readBit, readBits, readBoolean, readByte, readBytes, readChar, readDouble, readFloat, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readInt, readInt, readLine, readLong, readShort, readUnsignedByte, readUnsignedInt, readUnsignedInt, readUnsignedShort, readUTF, reset, resetToInitialState, setBitOffset, setByteOrder, skip, skipBytes, skipBytes |
Methods inherited from class java.io.InputStream |
---|
available, markSupported |
Methods inherited from class java.lang.Object |
---|
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public HTTPRangeRequestStream(URL url) throws IOException
length()
will return -1.
url
-
IOException
- if the request used to determine the resource length failspublic HTTPRangeRequestStream(URL url, long length)
url
- length
- Method Detail |
---|
public long getStreamPosition() throws IOException
IOException
public long getSizeEstimate()
SeekableInputStream
getSizeEstimate
in class SeekableInputStream
public long length() throws IOException
SeekableInputStream
length
in interface ImageInputStream
length
in class SeekableInputStream
IOException
- if an I/O error occurs.public int read() throws IOException
SeekableInputStream
int
between 0 and 255. If
EOF is reached, -1
is returned.
Subclasses must provide an implementation for this method. The subclass implementation should update the stream position before exiting.
The bit offset within the stream must be reset to zero before the read occurs.
read
in interface ImageInputStream
read
in class SeekableInputStream
-1
if EOF is reached.
IOException
- if the stream has been closed.public int read(byte[] b, int off, int len) throws IOException
SeekableInputStream
len
bytes from the stream, and stores them into b
starting at index off
. If no bytes can be read because the end of the stream has
been reached, -1
is returned.
The bit offset within the stream must be reset to zero before the read occurs.
Subclasses must provide an implementation for this method. The subclass implementation should update the stream position before exiting.
read
in interface ImageInputStream
read
in class SeekableInputStream
b
- an array of bytes to be written to.off
- the starting position within b
to write to.len
- the maximum number of bytes to read.
-1
to indicate EOF.
IOException
- if an I/O error occurs.public void seek(long pos) throws IOException
SeekableInputStream
EOFException
will be thrown
only if a read is performed. The bit offset is set to 0.
An IndexOutOfBoundsException
will be thrown if pos
is smaller than
the flushed position (as returned by getflushedPosition
).
It is legal to seek past the end of the file; an EOFException
will be thrown only
if a read is performed.
seek
in interface ImageInputStream
seek
in class SeekableInputStream
pos
- a long
containing the desired file pointer position.
IOException
- if any other I/O error occurs.public long getRangeRequestSize()
public void setRangeRequestSize(long rangeRequestSize)
-1
open-ended range requests are issued. Those are ideal if access is
mostly forward-streaming but preclude the connection from using HTTP keep-alive as each
connection must be forcibly torn down when seeking.
rangeRequestSize
- the size in bytespublic long getReopenForwardThreshold()
public void setReopenForwardThreshold(long reopenForwardThreshold)
reopenForwardThreshold
- the size in bytespublic boolean isFailOnUnsupportedRangeRequest()
true
) or fall back to plain streaming transfer (false
).
true
if transfers will fail if the target HTTP service does not support
range requests.public void setFailOnUnsupportedRangeRequest(boolean failOnUnsupportedRangeRequest)
true
) or to fall back to plain streaming transfer (false
).
Default: false
failOnUnsupportedRangeRequest
- set to true
to fail if the target HTTP
service does not support range requests.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |