code: public RandomAccessFile getRandomAccessFile(FixupStream fs) throws IOException
     {
        int i = 0;
        try
        {
           for (i = 0; i < listFixupStream.size(); i++)
              if (this.listFixupStream.get(i).compare(fs))
                 return listRandomAccessFile.get(i);
        }
        catch (IndexOutOfBoundsException e)
        {
           try
           {
              Thread.sleep(SLEEP_TIME);
              return listRandomAccessFile.get(i);
           }
           catch (InterruptedException ie)
           {
              LOG.error("The interrupted exceptio : ", ie);
           }
           catch (IndexOutOfBoundsException ioobe)
           {
              if (LOG.isDebugEnabled())
              {
                 LOG.info("listFixupStream.size() == " + listFixupStream.size());
                 LOG.info("listRandomAccessFile.size() == " + listRandomAccessFile.size());
                 LOG.info(" i == " + i);
              }
              synchronized (this)
              {
                 if (listFile.size() > i)
                 {
                    listFile.remove(i);
                 }
                 listFixupStream.remove(i);
  
                 addNewStream(fs);
  
                 getRandomAccessFile(fs);
              }
           }
        }
        return null;
     }
docs: getRandomAccessFile.
  
  @param fs
  the FixupStream
  @return RandomAccessFile return the RandomAccessFile by FixupStream
  @throws IOException
  will be generated the IOException