docs: public Metadata readMetadata(InputStream stream, Charset encoding, String filePath, @Nullable CharHandler otherHandler) {
      LineCounter lineCounter = new LineCounter(filePath, encoding);
      FileHashComputer fileHashComputer = new FileHashComputer(filePath);
      LineOffsetCounter lineOffsetCounter = new LineOffsetCounter();
  
      if (otherHandler != null) {
        CharHandler[] handlers = {lineCounter, fileHashComputer, lineOffsetCounter, otherHandler};
        readFile(stream, encoding, filePath, handlers);
      } else {
        CharHandler[] handlers = {lineCounter, fileHashComputer, lineOffsetCounter};
        readFile(stream, encoding, filePath, handlers);
      }
      return new Metadata(lineCounter.lines(), lineCounter.nonBlankLines(), fileHashComputer.getHash(), lineOffsetCounter.getOriginalLineStartOffsets(),
        lineOffsetCounter.getOriginalLineEndOffsets(),
        lineOffsetCounter.getLastValidOffset());
    }