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.
|