سؤال

أجريت مؤخرا مناقشة مع زميل حول تسلسل بيانات البايت عبر شبكة. اعتاد BinaryFormatter فئة إلى "إلغاء" بيانات البايت التي أرسلتها إليه. هذا لم ينجح وكان من الواضح أن استثنائية... استثناءات. Binaryformatter لا يمكن أن "لا تحظى" البيانات بشكل صحيح لأن بياناتي كانت مجرد صفيف بايت.

دوافعه ل BinaryFormatter كان الاستقلال منصة. أنا لست مقتنع بهذا الموقف. عندما كلاهما المستخدمة BinaryReader أو BinaryWriter, ، عملت الأمور بشكل جيد في الأرض الأرض.

ما هو الاستخدام لذلك من BinaryFormatter وإنني أنظر إلى استخدامه في كل سيناريو أينما كنت بحاجة لإرسال البايتات فوق السلك؟

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

المحلول

بالتأكيد، إذا كان لديك بياناتك byte[], BinaryFormatter ليس شيئا حكيما للاستخدام. أنت فقط تكتب البيانات إلى السلك. ومع ذلك، إذا كان لديك مجموعة من الكائنات وترغب في تسلسلها إلى دفق، BinaryFormatter من الأسهل بكثير استخدامها من كتابة كل مجال يدويا لكل نوع باليد. الغرض من BinaryFormatter أو أي مخطط تسلسل / تحيزي بشكل عام هو تقديم طريقة للاستمرار في رسم بياني كائن (ربما معقدة) كسلسلة من البايتات.

نصائح أخرى

يبدو لي وكأنك قد ترغب في النظر إلى شيء مثل "المخازن المؤقتة البروتوكول"، والتي (على عكس BinaryFormatter) هو عالية الأداء، منخفض النطاق الترددي، المحمولة / منصة عبر, ، تنسيق التسلسل الثنائي المتسامح (WOW، هذا فم).

لحسن الحظ، هناك إصدارات في .NET، مثل protobuf-net..

(الإفصاح: أنا المؤلف، لكنه مجاني؛ أنا لا أحاول بيع أي شيء - فقط يوفر لك الكثير من الوقت والألم)

BinaryFormatter هو جدا ... هش؛ إنه محدد. المرة الوحيدة التي أستخدمها هي وراء الكواليس للتواصل بين AppDomainS على نفس الجهاز. خلاف ذلك، أود أن أنظر إلى Serializers القائمة على العقود، مثل XmlSerializer, DataContractSerializer, أو protobuf-net.

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