يامل:كائن تفريغ دون تضمين اسم الفئة
سؤال
انا لدي 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 على إعطائي مخرجات بدون اسم للفصل ولكني ضائع تمامًا فيما يتعلق بكيفية تحقيق ذلك.
نصائح أخرى
كيف تقيس السرعة؟ماذا تقصد بـ "كمية البيانات"؟هل هو بحجم مستند YAML أم كمية من المستندات؟
إخراج JYaml هو غير صحيح.وفقًا للمواصفات، يتم تجاهل الشرطات السفلية في الأرقام و1_1 = 11 (على الأقل بالنسبة لـ YAML 1.1).ولأنها في الواقع سلسلة وليست عددًا صحيحًا، يجب أن يكون التمثيل:
- '1_1':واحد
أو قانونيا
- !!str "1_1":!!str "واحد"
وإلا فعند تحليل المستند، سيتم إنشاء Map<عدد صحيح, سلسلة> بدلاً من الخريطة<خيط, ، سلسلة>
لدى JYaml العديد من المشكلات المفتوحة ولا تطبق YAML 1.1 كاملة
قد يكون JYaml بالفعل أسرع ولكن يرجع ذلك إلى التحليل والانبعاث المبسط.