code: private void readColumnBlock(int startIndex, int blockLength) throws Exception
     {
        int endIndex = startIndex + blockLength;
        List<Integer> blocks = new ArrayList<Integer>();
        for (int index = startIndex; index < endIndex - 11; index++)
        {
           if (matchChildBlock(index))
           {
              int childBlockStart = index - 2;
              blocks.add(Integer.valueOf(childBlockStart));
           }
        }
        blocks.add(Integer.valueOf(endIndex));
  
        int childBlockStart = -1;
        for (int childBlockEnd : blocks)
        {
           if (childBlockStart != -1)
           {
              int childblockLength = childBlockEnd - childBlockStart;
              try
              {
                 readColumn(childBlockStart, childblockLength);
              }
              catch (UnexpectedStructureException ex)
              {
                 logUnexpectedStructure();
              }
           }
           childBlockStart = childBlockEnd;
        }
     }
docs: Read multiple columns from a block.
  
  @param startIndex start of the block
  @param blockLength length of the block