كيفية إجراء تسلسل وإلغاء تسلسل فئة تحتوي على أعضاء بيانات معقدة في لغة C
مقدمة
يتضمن التسلسل ترجمة حالة الكائن إلى دفق من البايتات التي يمكن تخزينها وإعادة بنائها لاحقًا مرة أخرى إلى كائن بنفس الحالة. توفر هذه المقالة إرشادات حول إجراء تسلسل وإلغاء تسلسل فئة مع أعضاء من أنواع البيانات المخصصة في لغة C، وتقدم اقتراحات التنفيذ للسرعة المثلى وقابلية النقل وكفاءة الذاكرة.
تعريف واجهة التسلسل
يجب أن تحدد واجهة التسلسل المناسبة وظائف التسلسل (التحويل إلى البايتات) وإلغاء التسلسل (إعادة البناء من البايتات). نوع الإرجاع الموصى به لوظيفة التسلسل هو متجه للبايتات، std::vector
مثال لواجهة التسلسل:
std::vector<uint8_t> serialize(Mango const& Man);
Mango deserialize(std::span<uint8_t const> data);
تسلسل نوع البيانات المخصصة
بالنسبة لأنواع البيانات المخصصة، حدد وظائف التسلسل المخصصة داخل مساحة الاسم لتلك أنواع البيانات. على سبيل المثال، فكر في نوع بيانات مخصص ValType:
namespace MangoLib {
enum class ValType : uint8_t {
#define UseValType
#define Line(NAME, VALUE, STRING) NAME = VALUE
Line(void_, 0, "void"),
Line(int_, 1, "int"),
Line(bool_, 2, "bool"),
Line(string_, 3, "string"),
#undef Line
#undef UseValType
};
}
لهذا النوع، يمكنك تحديد وظيفة التسلسل:
namespace MangoLib {
template <typename Out>
Out do_generate(Out out, ValType const& x) {
using my_serialization_helpers::do_generate;
return do_generate(out,
static_cast<std::underlying_type_t<ValType>>(x));
}
}
يجب تحديد وظائف التسلسل المماثلة لأنواع البيانات المخصصة الأخرى حسب الحاجة.
التنفيذ
تأخذ اقتراحات التنفيذ التالية في الاعتبار السرعة وقابلية النقل و كفاءة الذاكرة:
لتحسين استخدام الذاكرة أثناء التسلسل:
تجنب المؤشرات:
للحصول على السرعة المثلى و قابلية النقل:
أنواع البيانات الأولية:
استخدم وظائف التسلسل المتخصصة لأنواع البيانات البدائية لمعالجة أسرع.ملف IO:
توفير وظائف التسلسل التي تعمل على تدفقات الملفات لتسهيل التخزين.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3