code: public MappedByteBuffer map() throws IOException {
  
          long length = -1;
          try {
  
              if(mappedByteBuffer == null) {
                  /* Sample the file length just before we mmap() the
                   * file, as it may have changed size since the ctor. We
                   * do need to remember the exact length we mmap()ed for
                   * later when we unmap() to avoid leaking mappings, but
                   * MappedByteBuffer does that for us.
                   */
                  length = file.length();
                  FileInputStream in = new FileInputStream(file);
                  FileChannel channel = in.getChannel();
                  mappedByteBuffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, length);
  
                  closer.add(new MappedByteBufferCloser(mappedByteBuffer));
  
                  /* On Unix-like systems we don't need to keep the file
                   * descriptor around after we mmap()ed the file.  So
                   * close it now. */
                  channel.close();
                  in.close();
              }
  
              return mappedByteBuffer;
  
          } catch(IOException e) {
              log.error(String.format("Failed to map %s of length %,d",
                                      file.getPath(), length), e);
  
              throw new IOException(String.format("Failed to map %s of length %,d",
                                                  file.getPath(),
                                                  length), e);
          }
      }
docs: Return a new MappedByteBuffer which can be used to read
  data from the file.  If setAutoLock is true, attempt to
  lock the file's data in memory.  Calling map() multiple
  times returns the same MappedByteBuffer.