final String readOneGame(GameInfo gi){
  try {
    RandomAccessFile f=new RandomAccessFile(fileName,"r");
    byte[] pgnData=new byte[(int)(gi.endPos - gi.startPos)];
    f.seek(gi.startPos);
    f.readFully(pgnData);
    f.close();
    return new String(pgnData);
  }
 catch (  IOException e) {
  }
  return null;
}

final String readOneGame ( GameInfo gi ) { try { RandomAccessFile f = new RandomAccessFile ( fileName , "r" ) ; byte [ ] pgnData = new byte [ ( int ) ( gi . endPos - gi . startPos ) ] ; f . seek ( gi . startPos ) ; f . readFully ( pgnData ) ; f . close ( ) ; return new String ( pgnData ) ; } catch ( IOException e ) { } return null ; }
read one game defined by gi . return null on failure .
