docs: @Override
      public final int readInt() {
          char firstchar = nextGoodChar();
          boolean quote = false;
          if (firstchar == '"' || firstchar == '\'') {
              quote = true;
              firstchar = nextGoodChar();
              if (firstchar == '"' || firstchar == '\'') return 0;
          }
          int value = 0;
          final boolean negative = firstchar == '-';
          if (!negative) {
              if (firstchar < '0' || firstchar > '9') throw new ConvertException("illegal escape(" + firstchar + ") (position = " + position + ")");
              value = firstchar - '0';
          }
          for (;;) {
              char ch = nextChar();
              if (ch == 0) break;
              if (ch >= '0' && ch <= '9') {
                  value = (value << 3) + (value << 1) + (ch - '0');
              } else if (ch == '"' || ch == '\'') {
              } else if (quote && ch <= ' ') {
              } else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') {
                  backChar(ch);
                  break;
              } else {
                  throw new ConvertException("illegal escape(" + ch + ") (position = " + position + ")");
              }
          }
          return negative ? -value : value;
      }