An interface for use with the
SegmentedSeekableStream
class. An instance of the
StreamSegmentMapper
interface provides the location and length of a segment of a source
SeekableStream
corresponding to the initial portion of a desired segment of the output stream.
As an example, consider a mapping between a source SeekableStream src
and a SegmentedSeekableStream dst
comprising bytes 100-149 and 200-249 of the source stream. The dst
stream has a reference to an instance mapper
of StreamSegmentMapper
.
A call to dst.seek(0); dst.read(buf, 0, 10)
will result in a call to mapper.getStreamSegment(0, 10)
, returning a new StreamSegment
with a starting position of 100 and a length of 10 (or less). This indicates that in order to read bytes 0-9 of the segmented stream, bytes 100-109 of the source stream should be read.
A call to dst.seek(10); int nbytes = dst.read(buf, 0, 100)
is somewhat more complex, since it will require data from both segments of src
. The method mapper.getStreamSegment(10, 100)
will be called. This method will return a new StreamSegment
with a starting position of 110 and a length of 40 (or less). The length is limited to 40 since a longer value would result in a read past the end of the first segment. The read will stop after the first 40 bytes and an addition read or reads will be required to obtain the data contained in the second segment.
This interface is not a committed part of the JAI API. It may be removed or changed in future releases of JAI.