content: package com.alibaba.fastjson.parser.deserializer;
  
  import java.lang.reflect.Type;
  import java.net.InetAddress;
  import java.net.InetSocketAddress;
  
  import com.alibaba.fastjson.JSONException;
  import com.alibaba.fastjson.parser.DefaultJSONParser;
  import com.alibaba.fastjson.parser.JSONLexer;
  import com.alibaba.fastjson.parser.JSONToken;
  
  public class InetSocketAddressDeserializer implements ObjectDeserializer {
  
      public final static InetSocketAddressDeserializer instance = new InetSocketAddressDeserializer();
  
      @SuppressWarnings("unchecked")
      public <T> T deserialze(DefaultJSONParser parser, Type clazz, Object fieldName) {
          JSONLexer lexer = parser.getLexer();
  
          if (lexer.token() == JSONToken.NULL) {
              lexer.nextToken();
              return null;
          }
  
          parser.accept(JSONToken.LBRACE);
  
          InetAddress address = null;
          int port = 0;
          for (;;) {
              String key = lexer.symbol(parser.getSymbolTable());
              lexer.nextToken();
  
              if (key.equals("address")) {
                  parser.accept(JSONToken.COLON);
                  address = parser.parseObject(InetAddress.class);
              } else if (key.equals("port")) {
                  parser.accept(JSONToken.COLON);
                  if (lexer.token() != JSONToken.LITERAL_INT) {
                      throw new JSONException("port is not int");
                  }
                  port = lexer.intValue();
                  lexer.nextToken();
              } else {
                  parser.accept(JSONToken.COLON);
                  parser.parse();
              }
  
              if (lexer.token() == JSONToken.COMMA) {
                  lexer.nextToken();
                  continue;
              }
  
              break;
          }
  
          parser.accept(JSONToken.RBRACE);
  
          return (T) new InetSocketAddress(address, port);
      }
  
      public int getFastMatchToken() {
          return JSONToken.LBRACE;
      }
  }
  