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 की वजह के तौर पर सेट किया जाएगा.