docs: public void extract(@NotNull final SequentialReader reader, @NotNull final Metadata metadata)
      {
          HuffmanTablesDirectory directory = metadata.getFirstDirectoryOfType(HuffmanTablesDirectory.class);
          if (directory == null) {
              directory = new HuffmanTablesDirectory();
              metadata.addDirectory(directory);
          }
  
          try {
              while (reader.available() > 0) {
                  byte header = reader.getByte();
                  HuffmanTableClass tableClass = HuffmanTableClass.typeOf((header & 0xF0) >> 4);
                  int tableDestinationId = header & 0xF;
  
                  byte[] lBytes = getBytes(reader, 16);
                  int vCount = 0;
                  for (byte b : lBytes) {
                      vCount += (b & 0xFF);
                  }
                  byte[] vBytes = getBytes(reader, vCount);
                  directory.getTables().add(new HuffmanTable(tableClass, tableDestinationId, lBytes, vBytes));
              }
          } catch (IOException me) {
              directory.addError(me.getMessage());
          }
  
          directory.setInt(HuffmanTablesDirectory.TAG_NUMBER_OF_TABLES, directory.getTables().size());
      }