تسلسل protobuf لهياكل البيانات الخاصة باللغة

StackOverflow https://stackoverflow.com/questions/295017

  •  08-07-2019
  •  | 
  •  

سؤال

باستخدام جوجل المخازن المؤقتة للبروتوكول, ، لدي خدمة مكتوبة بالفعل بلغة Java ولها هياكل بيانات خاصة بها بالفعل.أرغب في استخدام pb لتسليم الرسائل وأبحث عن طريقة لإجراء تسلسل لهياكل البيانات الموجودة لدي في Java إلى pb.يمكنني أن أبدأ بتحديد جميع هياكل البيانات في pb من البداية، والتي ربما تكون هي الطريقة الصحيحة لكنني كسول جدًا.لذا، لنفترض أن لدي فئة شخص في Java (أو لغات أخرى مدعومة) أو فئة مستوى تحتوي على عشرات السمات، فهل هناك طريقة لإجراء تسلسل لهذه الفئة إلى pb؟هل يمكنني الحصول على سمة pb من النوع Plane؟(عندما لا يكون Plane pb، فهو فئة Java)

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

المحلول

لا، لا يمكنك. الحقول في رسائل protobuf دائما الأوليات (الأرقام، سلاسل والمصفوفات بايت، أساسا)، تتضمن التعدادات protobuf (التي يتم إنشاؤها كما تتضمن التعدادات جافا) أو رسائل protobuf - والإصدارات المتكررة من كل هذه، بالطبع

هل يمكن أن يحتمل إرسال الأداة التي تستخدم انعكاس لإنشاء ملف .proto من فئة جافا، ولكن أظن كنت تجد أنه من الأسهل فقط أن تفعل باليد. على وجه الخصوص، إذا كنت <م> لم استخدام انعكاس كنت ترغب في التأكد من أن الحقول تم إنشاؤها دائما مع نفس الاسم، للحفاظ على التوافق. شيء واحد كنت <م> يمكن القيام به هو تعليم الطبقات جافا وكتابة التعليمات البرمجية لإنشاء ملف .proto بناء على تلك الشروح - أو حتى يحتمل تسلسل مباشرة إلى تنسيق بروتو باستخدام شروحه. أنا شخصيا أنصح إنشاء ملف .proto في بعض الطريق بدلا من إعادة كتابة بشكل فعال المشروع PB - وإلا هناك خطر كبير من إدخال الخلل حيث هناك بالفعل اختبارها بدقة كود

إذا <م> لا إنشاء نظام الشرح، وأنا متأكد من كنتون فاردا (وبقية المجتمع PB) سوف تكون مهتمة في رؤيتها.

نصائح أخرى

إحدى الطرق التي يمكنني التفكير فيها هي الحصول على حقل سلسلة في protobuf وإجراء تسلسل لفئة Java إلى هذا الحقل باستخدام تسلسل Java البدائي.بهذه الطريقة، بافتراض أن متلقي الرسالة يعرف كيفية قراءتها/إلغاء تسلسلها، يمكنني بسهولة إجراء تسلسل Java إلى رسائل Java.

هناك سلبيات لهذه التقنية، بالرغم من ذلك.على سبيل المثال لا الحصر:

  1. إنها Java فقط إلى Java (لا يوجد C++ أو Python أو غيرها)
  2. إنها ليست فعالة مثل البروتوبوفات الأصلية (لا من حيث التحليل/التسلسل ولا حجم الرسالة)
  3. لديك منطق هياكل البيانات المنتشرة في عدة أماكن، بعضها موجود في ملف تعريف protobufs، وبعضها في فئات Java أخرى، وهذا يجعل الحفاظ على الأمور أكثر صعوبة.

ولكن - ينجز المهمة على المدى القصير.

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