UploadDataProvider

abstract class UploadDataProvider : Closeable


מחלקה מופשטת שמאפשרת למטמיע לספק גוף העלאה ל-UrlRequest. הוא תומך בהעלאות לא מחולקות (הגודל ידוע מראש) ובהעלאות מחולקות (הגודל לא ידוע מראש). חשוב לדעת שלא כל השרתים תומכים בהעלאות מקוטעות.

ההעלאה תמיד תהיה מחולקת לחלקים, גם אם הנתונים יישלחו יותר מפעם אחת, או שהיא אף פעם לא תהיה מחולקת לחלקים.

סיכום

‫constructors ציבוריים

פונקציות ציבוריות

Unit

הפונקציה נקראת כשהבקשה כבר לא צריכה את UploadDataProvider, כדי שיהיה אפשר לשחרר משאבים (כמו קובץ) באופן מפורש.

abstract Long

אם ההעלאה לא מחולקת לחלקים, הפונקציה מחזירה את אורך ההעלאה.

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

קורא נתוני העלאה אל byteBuffer.

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

מחזיר את נתוני ההעלאה לתחילתם.

‫constructors ציבוריים

UploadDataProvider

UploadDataProvider()

פונקציות ציבוריות

סגירה

fun close(): Unit

הפונקציה נקראת כשהבקשה כבר לא צריכה את UploadDataProvider, כדי שיהיה אפשר לשחרר משאבים (כמו קובץ) באופן מפורש.

הקפצת הודעות שגיאה (throw)
java.io.IOException

אם אירעה שגיאת קלט/פלט במהלך התהליך. אם הבקשה לא הושלמה, היא תיכשל. אחרת, היא תתועד.

getLength

abstract fun getLength(): Long

אם ההעלאה לא מחולקת לחלקים, הפונקציה מחזירה את אורך ההעלאה. אם מדובר בהעלאה של נתונים בחלקים, הפונקציה תמיד מחזירה את הערך ‎-1.

החזרות
Long

משך ההעלאה להעלאות שלא מחולקות לחלקים, אחרת -1.

הקפצת הודעות שגיאה (throw)
java.io.IOException

אם אירעה שגיאת קלט/פלט במהלך התהליך.

קריאה

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

קורא נתוני העלאה אל byteBuffer. בסיום, המיקום של המאגר מתעדכן לסוף הבייטים שנקראו. המגבלה של המאגר לא משתנה. אחרי כל קריאה של ה-method הזו, צריך לבצע קריאה אחת, סינכרונית או אסינכרונית, אל uploadDataSink: onReadSucceeded במקרה של הצלחה או onReadError במקרה של כישלון. הקריאה או ההרצה אחורה לא יופעלו עד שאחת מהשיטות האלה או השנייה יופעלו. גם אם UrlRequest המשויך מבוטל, עדיין צריך להפעיל את אחד מהם כדי לשחרר את המשאבים בצורה בטוחה. העלאת חריגה תגרום גם לשחרור משאבים ולשגיאה בבקשה.

הערה: בהעלאות לא מקוטעות, צריך לקרוא לפונקציה onReadSucceeded רק אם הקריאה הצליחה ונקרא לפחות בייט אחד לתוך byteBuffer. בהעלאות של נתונים בחלקים (גודל הנתונים לא ידוע), מותר לקרוא ל-onReadSucceeded עבור החלק האחרון עם מאגר בייטים ריק.

פרמטרים
uploadDataSink: UploadDataSink!

האובייקט שיישלח אליו עדכון כשהקריאה תסתיים.

byteBuffer: ByteBuffer!

המאגר שאליו יועתקו הבייטים שנקראו. אל תשנו את המגבלה של byteBuffer.

הקפצת הודעות שגיאה (throw)
java.io.IOException

אם אירעה שגיאת קלט/פלט במהלך התהליך. הקריאה ל-onFailed תתבצע כשהחריגה שהופעלה מוגדרת כסיבה ל-CallbackException.

אחורה

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

מחזיר את נתוני ההעלאה לתחילתם. מופעל כש-Cronet דורש שספק נתוני ההעלאה יהיה במצב שווה ערך למצב שבו read עדיין לא נקרא.

כדי לציין שהפעולה הסתיימה, הטמעות של הפונקציה הזו חייבות לקרוא ל-onRewindSucceeded כדי לציין הצלחה, או ל-onRewindError כדי לציין כשל. גם אם UrlRequest המשויך מבוטל, עדיין צריך להפעיל את אחד מהם כדי לשחרר את המשאבים בצורה בטוחה. העלאת חריגה מהשיטה שקולה לקריאה ל-onRewindError. אם ההרצה לאחור לא נתמכת (לדוגמה, אם הקריאה מתבצעת משידור חד-פעמי), צריך להפעיל את onRewindError באופן מיידי.

המטמיע יכול להניח בבטחה שלא תונפק קריאה של read או של rewind בו-זמנית עד שהוא יודיע ל-sink שההרצה לאחור הסתיימה, כפי שמתואר בפסקה הקודמת.

השיטה הזו משמשת באופן פנימי את Cronet אם צריך להעלות את הגוף מספר פעמים. זה יכול לקרות במצבים שונים, למשל כשעוקבים אחרי הפניות או כשמנסים לשלוח מחדש בקשות אחרי פסק זמן או ניתוק מהרשת. שימו לב: בדרך כלל לא חובה להטמיע את התכונה 'הרצה אחורה', אבל אם הבקשות ידרשו אותה, הן ייכשלו אלא אם תטמיעו אותה.

פרמטרים
uploadDataSink: UploadDataSink!

האובייקט שיודיע כשהפעולה של ההרצה לאחור תושלם, בהצלחה או לא.

הקפצת הודעות שגיאה (throw)
java.io.IOException

אם אירעה שגיאת קלט/פלט במהלך התהליך. הקריאה ל-onFailed תתבצע כשהחריגה שהופעלה מוגדרת כסיבה ל-CallbackException.