public static void serialize()

in linkis-engineconn-plugins/hive/src/main/java/org/apache/linkis/engineplugin/hive/serde/CustomerDelimitedJSONSerDe.java [61:214]


  public static void serialize(
      ByteStream.Output out,
      Object obj,
      ObjectInspector objInspector,
      byte[] separators,
      int level,
      Text nullSequence,
      boolean escaped,
      byte escapeChar,
      boolean[] needsEscape)
      throws IOException, SerDeException {
    if (obj == null) {
      out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
    } else {
      char separator;
      List list;
      switch (objInspector.getCategory()) {
        case PRIMITIVE:
          writePrimitiveUTF8(
              out, obj, (PrimitiveObjectInspector) objInspector, escaped, escapeChar, needsEscape);
          return;
        case LIST:
          separator = (char) getSeparator(separators, level);
          ListObjectInspector loi = (ListObjectInspector) objInspector;
          list = loi.getList(obj);
          ObjectInspector eoi = loi.getListElementObjectInspector();
          if (list == null) {
            out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
          } else {
            for (int i = 0; i < list.size(); ++i) {
              if (i > 0) {
                out.write(separator);
              }

              serialize(
                  out,
                  list.get(i),
                  eoi,
                  separators,
                  level + 1,
                  nullSequence,
                  escaped,
                  escapeChar,
                  needsEscape);
            }
          }

          return;
        case MAP:
          separator = (char) getSeparator(separators, level);
          char keyValueSeparator = (char) getSeparator(separators, level + 1);
          MapObjectInspector moi = (MapObjectInspector) objInspector;
          ObjectInspector koi = moi.getMapKeyObjectInspector();
          ObjectInspector voi = moi.getMapValueObjectInspector();
          Map<?, ?> map = moi.getMap(obj);
          if (map == null) {
            out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
          } else {
            boolean first = true;
            Iterator var24 = map.entrySet().iterator();

            while (var24.hasNext()) {
              Map.Entry<?, ?> entry = (Map.Entry) var24.next();
              if (first) {
                first = false;
              } else {
                out.write(separator);
              }

              serialize(
                  out,
                  entry.getKey(),
                  koi,
                  separators,
                  level + 2,
                  nullSequence,
                  escaped,
                  escapeChar,
                  needsEscape);
              out.write(keyValueSeparator);
              serialize(
                  out,
                  entry.getValue(),
                  voi,
                  separators,
                  level + 2,
                  nullSequence,
                  escaped,
                  escapeChar,
                  needsEscape);
            }
          }

          return;
        case STRUCT:
          separator = (char) getSeparator(separators, level);
          StructObjectInspector soi = (StructObjectInspector) objInspector;
          List<? extends StructField> fields = soi.getAllStructFieldRefs();
          list = soi.getStructFieldsDataAsList(obj);
          if (list == null) {
            out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
          } else {
            for (int i = 0; i < list.size(); ++i) {
              if (i > 0) {
                out.write(separator);
              }

              serialize(
                  out,
                  list.get(i),
                  ((StructField) fields.get(i)).getFieldObjectInspector(),
                  separators,
                  level + 1,
                  nullSequence,
                  escaped,
                  escapeChar,
                  needsEscape);
            }
          }

          return;
        case UNION:
          separator = (char) getSeparator(separators, level);
          UnionObjectInspector uoi = (UnionObjectInspector) objInspector;
          List<? extends ObjectInspector> ois = uoi.getObjectInspectors();
          if (ois == null) {
            out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
          } else {
            LazyUtils.writePrimitiveUTF8(
                out,
                new Byte(uoi.getTag(obj)),
                PrimitiveObjectInspectorFactory.javaByteObjectInspector,
                escaped,
                escapeChar,
                needsEscape);
            out.write(separator);
            serialize(
                out,
                uoi.getField(obj),
                (ObjectInspector) ois.get(uoi.getTag(obj)),
                separators,
                level + 1,
                nullSequence,
                escaped,
                escapeChar,
                needsEscape);
          }

          return;
        default:
          throw new RuntimeException("Unknown category type: " + objInspector.getCategory());
      }
    }
  }