code: public List<Data> select(byte[]... keys) throws DRUMSException {
          List<Data> result = new ArrayList<Data>();
          IntObjectOpenHashMap<ArrayList<byte[]>> bucketKeyMapping = getBucketKeyMapping(keys);
          String filename;
          for (IntObjectCursor<ArrayList<byte[]>> entry : bucketKeyMapping) {
              filename = gp.DATABASE_DIRECTORY + "/" + hashFunction.getFilename(entry.key);
              HeaderIndexFile<Data> indexFile = null;
              try {
                  indexFile = new HeaderIndexFile<Data>(filename, HeaderIndexFile.AccessMode.READ_ONLY,
                          gp.HEADER_FILE_LOCK_RETRY, gp);
  
                  ArrayList<byte[]> keyList = entry.value;
                  result.addAll(searchForData(indexFile, keyList.toArray(new byte[keyList.size()][])));
              } catch (FileLockException ex) {
                  logger.error("Could not access the file {} within {} retries. The file seems to be locked.", filename,
                          gp.HEADER_FILE_LOCK_RETRY);
                  throw new DRUMSException(ex);
              } catch (IOException ex) {
                  logger.error("An exception occurred while trying to get objects from the file {}.", filename, ex);
                  throw new DRUMSException(ex);
              } finally {
                  if (indexFile != null) {
                      indexFile.close();
                  }
              }
          }
          return result;
      }
docs: Selects all existing records to the keys in the given array.
  
  @param keys
  the keys to look for
  @return a list of all found elements
  @throws DRUMSException