code: void prefetch_all_headers(Info first_i, Comment first_c, int dataoffset)
        throws JOrbisException{
      Page og=new Page();
      int ret;
  
      vi=new Info[links];
      vc=new Comment[links];
      dataoffsets=new long[links];
      pcmlengths=new long[links];
      serialnos=new int[links];
  
      for(int i=0; i<links; i++){
        if(first_i!=null&&first_c!=null&&i==0){
          // we already grabbed the initial header earlier.  This just
          // saves the waste of grabbing it again
          vi[i]=first_i;
          vc[i]=first_c;
          dataoffsets[i]=dataoffset;
        }
        else{
          // seek to the location of the initial header
          seek_helper(offsets[i]); //!!!
          vi[i]=new Info();
          vc[i]=new Comment();
          if(fetch_headers(vi[i], vc[i], null, null)==-1){
            dataoffsets[i]=-1;
          }
          else{
            dataoffsets[i]=offset;
            os.clear();
          }
        }
  
        // get the serial number and PCM length of this link. To do this,
        // get the last page of the stream
        {
          long end=offsets[i+1]; //!!!
          seek_helper(end);
  
          while(true){
            ret=get_prev_page(og);
            if(ret==-1){
              // this should not be possible
              vi[i].clear();
              vc[i].clear();
              break;
            }
            if(og.granulepos()!=-1){
              serialnos[i]=og.serialno();
              pcmlengths[i]=og.granulepos();
              break;
            }
          }
        }
      }
    }
docs: attention to how that's done)