private void HandleSegmentReferredToCountAndRententionFlags(SegmentHeader segmentHeader)
        {
            short referedToSegmentCountAndRetentionFlags = reader.Readbyte();

            int referredToSegmentCount = (referedToSegmentCountAndRetentionFlags & 224) >> 5; // 224

            // =
            // 11100000
            short[] retentionFlags = null;
            /** take off the first three bits of the first byte */
            short firstbyte = (short)(referedToSegmentCountAndRetentionFlags & 31); // 31 =

            // 00011111

            if (referredToSegmentCount <= 4)
            { // short form
                retentionFlags    = new short[1];
                retentionFlags[0] = firstbyte;
            }
            else if (referredToSegmentCount == 7)
            { // long form
                short[] longFormCountAndFlags = new short[4];
                /** add the first byte of the four */
                longFormCountAndFlags[0] = firstbyte;

                for (int i = 1; i < 4; i++)
                {
                    // add the next 3 bytes to the array
                    longFormCountAndFlags[i] = reader.Readbyte();
                }

                /** get the count of the referred to Segments */
                referredToSegmentCount = BinaryOperation.GetInt32(longFormCountAndFlags);

                /** calculate the number of bytes in this field */
                int noOfbytesInField = (int)Math.Ceiling(4 + ((referredToSegmentCount + 1) / 8d));
                // System.out.println("noOfbytesInField = " + noOfbytesInField);

                int noOfRententionFlagbytes = noOfbytesInField - 4;
                retentionFlags = new short[noOfRententionFlagbytes];
                reader.Readbyte(retentionFlags);
            }
            else
            { // error
              //throw new JBIG2Exception("Error, 3 bit Segment count field = " + referredToSegmentCount);
            }

            segmentHeader.SetReferredToSegmentCount(referredToSegmentCount);

            if (JBIG2StreamDecoder.debug)
            {
                Console.WriteLine("referredToSegmentCount = " + referredToSegmentCount);
            }

            segmentHeader.SetRententionFlags(retentionFlags);

            if (JBIG2StreamDecoder.debug)
            {
                Console.WriteLine("retentionFlags = ");
            }

            if (JBIG2StreamDecoder.debug)
            {
                for (int i = 0; i < retentionFlags.Length; i++)
                {
                    Console.WriteLine(retentionFlags[i] + " ");
                }
                Console.WriteLine("");
            }
        }