### Question:
IndexedFidReader implements FeatureIDReader, Closeable { public void goTo(final long recno) throws IOException { assert recno<count; if (readChannel instanceof FileChannel) { long newPosition = IndexedFidWriter.HEADER_SIZE + (recno * IndexedFidWriter.RECORD_SIZE); if (newPosition >= bufferStart + buffer.limit() || newPosition < bufferStart) { FileChannel fc = (FileChannel) readChannel; fc.position(newPosition); buffer.limit(buffer.capacity()); buffer.position(buffer.limit()); } else { buffer.position((int) (newPosition - bufferStart)); } } else { throw new IOException( "Read Channel is not a File Channel so this is not possible."); } } IndexedFidReader(final URI fixUrl, final ReadableByteChannel fixChannel,
            final RecordNumberTracker reader); long getCount(); int getRemoves(); long findFid(final String fid); void goTo(final long recno); @Override void close(); @Override boolean isClosed(); @Override boolean hasNext(); @Override String next(); int currentSHXIndex(); long getCurrentFIDIndex();  }### Answer:
@Test public void testGoTo() throws IOException { reader.goTo(10); assertEquals(shpFiles.getTypeName() + ".11", reader.next()); assertTrue(reader.hasNext()); reader.goTo(15); assertEquals(shpFiles.getTypeName() + ".16", reader.next()); assertTrue(reader.hasNext()); reader.goTo(0); assertEquals(shpFiles.getTypeName() + ".1", reader.next()); assertTrue(reader.hasNext()); reader.goTo(3); assertEquals(shpFiles.getTypeName() + ".4", reader.next()); assertTrue(reader.hasNext()); }