У меня есть ArrayList
объектов, выгружаемых в строку YAML, и я сравнивал производительность JYaml и SnakeYaml при обработке этого.
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));
Вывод из JYaml включает в себя имя класса сериализованного объекта, тогда как вывод из SnakeYaml не:
Выход JYaml:
- !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:
- {'1_1': One, '1_3': Three, '1_2': Two}
- {'2_1': One, '2_2': Two, '2_3': Three}
Я предпочитаю более «чистый» вывод класса без имени для SnakeYaml, так как он больше подходит для среды, не зависящей от языка.
Я предпочитаю скорость JYaml. Время сериализации / десериализации увеличивается линейно с количеством обрабатываемых данных, в отличие от экспоненциально с SnakeYaml.
Я бы хотел заставить JYaml дать мне вывод класса без имени, но я совершенно растерялся относительно того, как этого можно достичь.