in src/main/java/org/apache/pdfbox/jbig2/JBIG2Document.java [170:234]
private void mapStream() throws IOException
{
final List<SegmentHeader> segments = new LinkedList<SegmentHeader>();
long offset = 0;
int segmentType = 0;
/*
* Parse the file header if there is one.
*/
if (isFileHeaderPresent())
{
parseFileHeader();
offset += fileHeaderLength;
}
if (globalSegments == null)
{
globalSegments = new JBIG2Globals();
}
JBIG2Page page = null;
/*
* If organisation type is random-access: walk through the segment headers until EOF segment appears (specified
* with segment number 51)
*/
while (segmentType != 51 && !reachedEndOfStream(offset))
{
SegmentHeader segment = new SegmentHeader(this, subInputStream, offset,
organisationType);
final int associatedPage = segment.getPageAssociation();
segmentType = segment.getSegmentType();
if (associatedPage != 0)
{
page = getPage(associatedPage);
if (page == null)
{
page = new JBIG2Page(this, associatedPage);
pages.put(associatedPage, page);
}
page.add(segment);
}
else
{
globalSegments.addSegment(segment.getSegmentNr(), segment);
}
segments.add(segment);
offset = subInputStream.getStreamPosition();
// Sequential organization skips data part and sets the offset
if (organisationType == SEQUENTIAL)
{
offset += segment.getSegmentDataLength();
}
}
/*
* Random organization: segment headers are finished. Data part starts and the offset can be set.
*/
determineRandomDataOffsets(segments, offset);
}