UploadDataProvider

abstract class UploadDataProvider : Closeable


فئة مجرّدة تتيح للمضمِّن توفير نص تحميل إلى UrlRequest. يتوافق مع عمليات التحميل غير المقسَّمة (الحجم معروف مسبقًا) والمقسَّمة (الحجم غير معروف مسبقًا). يُرجى العِلم أنّ بعض الخوادم لا تتيح تحميل الملفات المقسّمة.

يتم تقسيم عملية التحميل دائمًا إلى أجزاء، وذلك على مستوى عمليات التحميل المتعددة إذا تم إرسال البيانات أكثر من مرة، أو لا يتم تقسيمها أبدًا.

ملخّص

طُرق وضع التصميم العامة

الوظائف العامة

Unit

يتم استدعاء هذه الطريقة عندما لا يعود الطلب بحاجة إلى UploadDataProvider، وذلك لكي يمكن إطلاق الموارد (مثل ملف) بشكل صريح.

abstract Long

إذا كان هذا التحميل غير مقسَّم، يعرض طول عملية التحميل.

abstract Unit
read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!)

تقرأ هذه السمة بيانات التحميل في byteBuffer.

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

إرجاع بيانات التحميل إلى البداية

طُرق وضع التصميم العامة

UploadDataProvider

UploadDataProvider()

الوظائف العامة

إغلاق

fun close(): Unit

يتم استدعاء هذه الطريقة عندما لا يعود الطلب بحاجة إلى UploadDataProvider، وذلك لكي يمكن إطلاق الموارد (مثل ملف) بشكل صريح.

عمليات الطرح
java.io.IOException

إذا حدث أي IOException أثناء العملية سيؤدي ذلك إلى تعذُّر إكمال الطلب إذا لم يكن مكتملًا بعد، وإلا سيتم تسجيله.

getLength

abstract fun getLength(): Long

إذا كان هذا التحميل غير مقسَّم، يعرض طول عملية التحميل. يجب أن تعرض القيمة -1 دائمًا إذا كان هذا التحميل مقسَّمًا إلى أجزاء.

المرتجعات
Long

تمثّل هذه السمة مدة التحميل لعمليات التحميل غير المقسّمة، أو القيمة -1 في الحالات الأخرى.

عمليات الطرح
java.io.IOException

إذا حدث أي IOException أثناء العملية

قراءة

abstract fun read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!): Unit

تقرأ هذه السمة بيانات التحميل في byteBuffer. عند اكتمال العملية، يتم تعديل موضع المخزن المؤقت إلى نهاية وحدات البايت التي تمت قراءتها. لا يتم تغيير الحدّ الأقصى للمخزن المؤقت. يجب أن يتبع كل استدعاء لهذه الطريقة استدعاء واحد، إما متزامن أو غير متزامن، إلى uploadDataSink: onReadSucceeded عند النجاح أو onReadError عند التعذّر. لن يتم استدعاء أي من الدالتين read أو rewind إلى أن يتم استدعاء إحدى هاتين الدالتين أو الدالة الأخرى. حتى إذا تم إلغاء UrlRequest المرتبط، يجب استدعاء أحدهما قبل أن يتم تحرير الموارد بأمان. سيؤدي طرح استثناء أيضًا إلى تحرير الموارد وإظهار خطأ في الطلب.

ملاحظة: بالنسبة إلى عمليات التحميل غير المقسَّمة، يجب استدعاء onReadSucceeded فقط عند نجاح عملية القراءة وقراءة بايت واحد على الأقل في byteBuffer. بالنسبة إلى عمليات التحميل المقسَّمة (حيث يكون حجم البيانات غير معروف)، يُسمح باستدعاء onReadSucceeded لآخر جزء مع مخزن مؤقت فارغ للبايتات.

المعلَمات
uploadDataSink: UploadDataSink!

العنصر الذي سيتم إرسال إشعار إليه عند اكتمال عملية القراءة.

byteBuffer: ByteBuffer!

المخزن المؤقت الذي سيتم نسخ البايتات المقروءة إليه لا تغيِّر الحدّ الأقصى لـ byteBuffer.

عمليات الطرح
java.io.IOException

إذا حدث أي IOException أثناء العملية سيتم استدعاء onFailed مع ضبط الاستثناء الذي تم طرحه كسبب لـ CallbackException.

ترجيع

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

إرجاع بيانات التحميل إلى البداية يتم استدعاؤه عندما يتطلّب Cronet أن يكون موفّر بيانات التحميل في حالة مكافئة لحالة عدم استدعاء read مطلقًا.

للإشارة إلى انتهاء العملية، يجب أن تستدعي عمليات تنفيذ هذه الدالة onRewindSucceeded للإشارة إلى النجاح، أو onRewindError في حال حدوث خطأ. حتى إذا تم إلغاء UrlRequest المرتبط، يجب استدعاء أحدهما قبل أن يتم تحرير الموارد بأمان. إنّ عرض استثناء من الطريقة يعادل استدعاء onRewindError. إذا لم يكن الترجيع متاحًا (على سبيل المثال، إذا كانت القراءة من بث لمرة واحدة)، يجب أن يتم استدعاء onRewindError على الفور.

يمكن للمنفِّذ أن يفترض بأمان أنّه لن يتم إصدار أي من read أو طلب rewind متزامن إلى أن يُعلم المصدر بأنّ عملية الترجيع قد انتهت، كما هو موضّح في الفقرة السابقة.

تستخدم Cronet هذه الطريقة داخليًا إذا كان يجب تحميل نص الطلب عدة مرات. يمكن أن يحدث ذلك في العديد من الحالات المختلفة، مثل عند اتّباع عمليات إعادة التوجيه، أو عند إعادة محاولة الطلبات بعد انتهاء المهلة أو انقطاع الاتصال بالشبكة. يُرجى العِلم أنّه على الرغم من أنّ تنفيذ عملية الترجيع يكون اختياريًا بشكل عام، ستتعذّر الطلبات التي تتطلّب ذلك ما لم يتم تنفيذ عملية الترجيع.

المعلَمات
uploadDataSink: UploadDataSink!

العنصر الذي سيتم إعلامه عند اكتمال عملية الترجيع، سواء بنجاح أو غير ذلك.

عمليات الطرح
java.io.IOException

إذا حدث أي IOException أثناء العملية سيتم استدعاء onFailed مع ضبط الاستثناء الذي تم طرحه كسبب لـ CallbackException.