code: protected synchronized void navigateToIndex(int reqIndex)
  			throws IOException {
  		// determine if navigation is necessary
  		if (reqIndex != index) {
  			// ensure that the requested index is valid
  			if (reqIndex < 0 || reqIndex >= size) {
  				throw new IndexOutOfBoundsException();
  			}
  			// navigate to requested index in file
  			if (reqIndex > index) {
  				// forward navigation
  				skipForward(reqIndex - index);
  			} else {
  				// backward navigation
  				int backSkips = index - reqIndex;
  				if (backSkips < (index / 2)) {
  					// check if current index is beyond valid list
  					if (index == size) {
  						// reset current position to last element in
  						// set and adjust index and skip counter.
  						index = (size - 1);
  						position = lastInsertPosition;
  						backSkips = index - reqIndex;
  					}
  					// move in backward direction
  					skipBackward(backSkips);
  				} else {
  					// it is faster to reset position to the beginning
  					// of the file and move forward from there to the
  					// requested index
  					resetPosition();
  					skipForward(reqIndex);
  				}
  			}
  		}
  		if (reqIndex != index) {
  			throw new IOException("Navigation fault! (required: " + reqIndex
  					+ ", yielded: " + index + ")");
  		}
  	}
docs: Repositions the low-level layer to read from the specified index.
  
  @param reqIndex
  Index to position the file pointer to.