Pregunta

Tengo una ArrayList de los objetos que están siendo arrojadas a un YAML cadena y se han de comparar el rendimiento de JYaml y SnakeYaml en el manejo de este.

    ArrayList<HashMap> testList = new ArrayList<HashMap>();
    HashMap<String, String> testMap1 = new HashMap<String, String>();
    HashMap<String, String> testMap2 = new HashMap<String, String>();

    testMap1.put("1_1", "One");
    testMap1.put("1_2", "Two");
    testMap1.put("1_3", "Three");

    testMap2.put("2_1", "One");
    testMap2.put("2_2", "Two");
    testMap2.put("2_3", "Three");

    testList.add(testMap1);
    testList.add(testMap2);

    System.out.println(jYaml.dump(testList));
    System.out.println(snakeYaml.dump(testList));


La salida de JYaml incluye el serial nombre de clase del objeto, mientras que la salida de SnakeYaml no:

JYaml de salida:

- !java.util.HashMap
  1_1: One
  1_3: Three
  1_2: Two
- !java.util.HashMap
  2_1: One
  2_2: Two
  2_3: Three

SnakeYaml de salida:

- {'1_1': One, '1_3': Three, '1_2': Two}
- {'2_1': One, '2_2': Two, '2_3': Three}


Yo prefiero la más "limpia" nombre de la clase-menos salida de SnakeYaml ya que esto sería más adecuado para un lenguaje neutro medio ambiente.

Yo prefiero el velocidad de JYaml.Seriación/deserialisation aumento de los tiempos de linealmente con la cantidad de datos a ser procesados, en contraposición a exponencialmente con SnakeYaml.

Me gustaría coaccionar JYaml en darme el nombre de la clase-menos de salida, pero estoy bastante perdido en cuanto a cómo puede lograrse esto.

¿Fue útil?

Solución

Compruebe el SnakeYAML última fuente. Ahora es posible (igual que en JYaml) para ignorar tipos implícitos y siempre analizar escalares como cadenas. Este es un par de veces más rápido. Mira aquí y aquí para ver cómo utilizar la nueva función.

(con la RegularExpressions fuera serialización / deserialización veces aumentan linealmente con la cantidad de datos que están siendo procesados.)

Otros consejos

¿Cómo se puede medir la velocidad ?¿Qué quieres decir con que cantidad de datos' ?Es de un tamaño de un archivo YAML documento o una cantidad de documentos ?

JYaml de salida es incorrecta.De acuerdo a la especificación de relieve en los números se ignoran y 1_1 = 11 (al menos para YAML 1.1).Porque de hecho, es una Cadena y no es un Entero, la representación será:

  • '1_1':Uno

o canónicamente

  • !!str "1_1":!!str "Uno"

De lo contrario, cuando se analiza el documento se va a crear el Mapa<Entero, String> en lugar de Mapa<Cadena, String>

JYaml tiene muchos temas abiertos y no implementa completa YAML 1.1

JYaml de hecho puede ser más rápido, pero es debido a la simplificación del análisis y la emisión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top