private void mapStream()

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);
    }