سؤال

أنا استخدم Javax.mail.internet.mimeBody * الإصدار 1.4.1

يريد برنامجي إرسال بعض البيانات الثنائية مع مستوى متعدد من التعشيش من خادم إلى عميل باستخدام MIMEMULTIPART. لاحظت أنه إذا كان ذلك على مستوى إذا نستخدم GetContent فسادا البيانات. كنت قادرا على إعادة إنتاج هذه المشكلة مع هذا المقتطف

giveacodicetagpre.

هنا هو الإخراج

giveacodicetagpre.

لقد قمت بتبسيط الكود بالكامل هنا وتبدو واضحا لاستخدام Get (RAW) Inputstream، لكننا لدينا NestedMultipart وكان المستوى العلوي الذي كان يفعل رايتنا الذي تسبب في فشله في بعض الحالات.

  1. الإدخال من مجموعة من النوع البايت، ولكن على العميل يستجيب GetContent بالسلسلة. يقوم الخادم بتعيين المحتوى إلى تطبيق / Octet-Stream ولكن على جانب العميل يتم إخراجه كسلسلة. ما الذي يحدث هنا؟
  2. أنا لست متأكدا من سبب إضافة البايت C2 قبل 8C. ما هو خاص جدا حول شخصية 8C؟
  3. ما هو الفرق بين getinputstream و getrawinputstream. متى تستخدم واحدة على آخر؟
هل كانت مفيدة؟

المحلول

ماذا يحتوي الدفق الكامل على أن يخلق الخادم والعميل يقرأ؟

لاحظ أنه باستخدام MIMEMULTIPART بدون MIMEMESSAGE، فأنت في عداد المفقودين بعض الأشياء التي تتم تلقائيا من أجلك بواسطة mimemessage، لا سيما تفتقد الاتصال إلى mimemultipart.updateheaders ().نظرا لأن الطريقة محمية، ستحتاج إلى Subclass Mimemultipart واتصل بهذه الطريقة قبل الاتصال WRITETO.إذا لم يصل هذا إلى حل مشكلتك، فقم بإظهار البيانات الدقيقة التي تتم كتابةها وقراءتها على الدفق.

كما هو مذكور أعلاه، إذا كنت تتوقع بيانات ثنائية، فأنت بالتأكيد ترغب في استخدام GetInputstream.تمنحك GetRawinputstream البيانات قبل أن يتم فك تشفيرها، على سبيل المثال، إدخال Base64 بدلا من الإخراج الثنائي.

نصائح أخرى

لا تستخدم GetContent () إذا أرجع سلسلة وتريد ثنائي.سلسلة ليست حاوية للبيانات الثنائية.استخدم GetInputstream () ونسخ البايتات.

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