docs: public static VocabCache<VocabWord> readVocabCache(@NonNull InputStream stream) throws IOException {
          val vocabCache = new AbstractCache.Builder<VocabWord>().build();
          val factory = new VocabWordFactory();
          boolean firstLine = true;
          long totalWordOcc = -1L;
          try (BufferedReader reader = new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))) {
              String line;
              while ((line = reader.readLine()) != null) {
                  // try to treat first line as header with 3 digits
                  if (firstLine) {
                      firstLine = false;
                      val split = line.split("\\ ");
  
                      if (split.length != 3)
                          continue;
  
                      try {
                          vocabCache.setTotalDocCount(Long.valueOf(split[1]));
                          totalWordOcc = Long.valueOf(split[2]);
                          continue;
                      } catch (NumberFormatException e) {
                          // no-op
                      }
                  }
  
                  val word = factory.deserialize(line);
  
                  vocabCache.addToken(word);
                  vocabCache.addWordToIndex(word.getIndex(), word.getLabel());
              }
          }
  
          if (totalWordOcc >= 0)
              vocabCache.setTotalWordOccurences(totalWordOcc);
  
          return vocabCache;
      }