بايت التسلسل
-
12-09-2019 - |
سؤال
أجريت مؤخرا مناقشة مع زميل حول تسلسل بيانات البايت عبر شبكة. اعتاد BinaryFormatter
فئة إلى "إلغاء" بيانات البايت التي أرسلتها إليه. هذا لم ينجح وكان من الواضح أن استثنائية... استثناءات. Binaryformatter
لا يمكن أن "لا تحظى" البيانات بشكل صحيح لأن بياناتي كانت مجرد صفيف بايت.
دوافعه ل BinaryFormatter
كان الاستقلال منصة. أنا لست مقتنع بهذا الموقف. عندما كلاهما المستخدمة BinaryReader
أو BinaryWriter
, ، عملت الأمور بشكل جيد في الأرض الأرض.
ما هو الاستخدام لذلك من BinaryFormatter
وإنني أنظر إلى استخدامه في كل سيناريو أينما كنت بحاجة لإرسال البايتات فوق السلك؟
المحلول
بالتأكيد، إذا كان لديك بياناتك byte[]
, BinaryFormatter
ليس شيئا حكيما للاستخدام. أنت فقط تكتب البيانات إلى السلك. ومع ذلك، إذا كان لديك مجموعة من الكائنات وترغب في تسلسلها إلى دفق، BinaryFormatter
من الأسهل بكثير استخدامها من كتابة كل مجال يدويا لكل نوع باليد. الغرض من BinaryFormatter
أو أي مخطط تسلسل / تحيزي بشكل عام هو تقديم طريقة للاستمرار في رسم بياني كائن (ربما معقدة) كسلسلة من البايتات.
نصائح أخرى
يبدو لي وكأنك قد ترغب في النظر إلى شيء مثل "المخازن المؤقتة البروتوكول"، والتي (على عكس BinaryFormatter
) هو عالية الأداء، منخفض النطاق الترددي، المحمولة / منصة عبر, ، تنسيق التسلسل الثنائي المتسامح (WOW، هذا فم).
لحسن الحظ، هناك إصدارات في .NET، مثل protobuf-net..
(الإفصاح: أنا المؤلف، لكنه مجاني؛ أنا لا أحاول بيع أي شيء - فقط يوفر لك الكثير من الوقت والألم)
BinaryFormatter
هو جدا ... هش؛ إنه محدد. المرة الوحيدة التي أستخدمها هي وراء الكواليس للتواصل بين AppDomain
S على نفس الجهاز. خلاف ذلك، أود أن أنظر إلى Serializers القائمة على العقود، مثل XmlSerializer
, DataContractSerializer
, أو protobuf-net.