code: public T get(final Txn<T> txn, final T key) {
      if (SHOULD_CHECK) {
        requireNonNull(txn);
        requireNonNull(key);
        txn.checkReady();
      }
      txn.kv().keyIn(key);
      final int rc = LIB.mdb_get(txn.pointer(), ptr, txn.kv().pointerKey(), txn
                                 .kv().pointerVal());
      if (rc == MDB_NOTFOUND) {
        return null;
      }
      checkRc(rc);
      return txn.kv().valOut(); // marked as out in LMDB C docs
    }
docs: Get items from a database, moving the {@link Txn#val()} to the value.
  
  <p>
  This function retrieves key/data pairs from the database. The address and
  length of the data associated with the specified \b key are returned in the
  structure to which \b data refers. If the database supports duplicate keys
  ({@link org.lmdbjava.DbiFlags#MDB_DUPSORT}) then the first data item for
  the key will be returned. Retrieval of other items requires the use of
  #mdb_cursor_get().
  
  @param txn transaction handle (not null; not committed)
  @param key key to search for in the database (not null)
  @return the data or null if not found