سؤال

انا لدي 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.زيادة أوقات التسلسل/إلغاء التسلسل خطيا مع كمية البيانات التي تتم معالجتها، بدلا من أضعافا مضاعفة مع سنيك يامل.

أرغب في إجبار JYaml على إعطائي مخرجات بدون اسم للفصل ولكني ضائع تمامًا فيما يتعلق بكيفية تحقيق ذلك.

هل كانت مفيدة؟

المحلول

وتحقق من أحدث مصدر SnakeYAML. ومن الآن ممكن (نفس في JYaml) لتجاهل الكتابة ضمنية ودائما تحليل سكالارس كسلاسل. هذا هو عدة مرات أسرع. انظر هنا و هنا لمعرفة كيفية استخدام الميزة الجديدة.

و(مع RegularExpressions خارج التسلسل / مرات deserialisation زيادة خطيا مع كمية البيانات التي يتم معالجتها).

نصائح أخرى

كيف تقيس السرعة؟ماذا تقصد بـ "كمية البيانات"؟هل هو بحجم مستند YAML أم كمية من المستندات؟

إخراج JYaml هو غير صحيح.وفقًا للمواصفات، يتم تجاهل الشرطات السفلية في الأرقام و1_1 = 11 (على الأقل بالنسبة لـ YAML 1.1).ولأنها في الواقع سلسلة وليست عددًا صحيحًا، يجب أن يكون التمثيل:

  • '1_1':واحد

أو قانونيا

  • !!str "1_1":!!str "واحد"

وإلا فعند تحليل المستند، سيتم إنشاء Map<عدد صحيح, سلسلة> بدلاً من الخريطة<خيط, ، سلسلة>

لدى JYaml العديد من المشكلات المفتوحة ولا تطبق YAML 1.1 كاملة

قد يكون JYaml بالفعل أسرع ولكن يرجع ذلك إلى التحليل والانبعاث المبسط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top