UploadDataProvider

public abstract class UploadDataProvider implements Closeable


यह एक ऐब्स्ट्रैक्ट क्लास है. इसकी मदद से, एम्बेड करने वाला व्यक्ति UrlRequest को अपलोड करने के लिए बॉडी उपलब्ध करा सकता है. यह, नॉन-चंक्ड (साइज़ पहले से पता हो) और चंक्ड (साइज़ पहले से पता न हो) दोनों तरह के अपलोड के साथ काम करता है. ध्यान दें कि सभी सर्वर, चंक्ड अपलोड के साथ काम नहीं करते.

अगर डेटा को एक से ज़्यादा बार भेजा जाता है, तो अपलोड हमेशा चंक्ड होता है. ऐसा कई अपलोड के दौरान हो सकता है. हालांकि, ऐसा कभी-कभी ही होता है.

खास जानकारी

सार्वजनिक कंस्ट्रक्टर

पब्लिक मेथड

void

इस मेथड को तब कॉल किया जाता है, जब किसी अनुरोध के लिए इस UploadDataProvider की ज़रूरत नहीं होती. इससे, संसाधनों (जैसे कि कोई फ़ाइल) को साफ़ तौर पर रिलीज़ किया जा सकता है.

abstract long

अगर यह नॉन-चंक्ड अपलोड है, तो यह अपलोड की लंबाई दिखाता है.

abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

अपलोड किए जाने वाले डेटा को byteBuffer में पढ़ता है.

abstract void
rewind(UploadDataSink uploadDataSink)

अपलोड किए जाने वाले डेटा को शुरुआत में रिवाइंड करता है.

सार्वजनिक कंस्ट्रक्टर

UploadDataProvider

public UploadDataProvider()

पब्लिक मेथड

close

public void close()

इस मेथड को तब कॉल किया जाता है, जब किसी अनुरोध के लिए इस UploadDataProvider की ज़रूरत नहीं होती. इससे, संसाधनों (जैसे कि कोई फ़ाइल) को साफ़ तौर पर रिलीज़ किया जा सकता है.

अपवाद
java.io.IOException

अगर प्रोसेस के दौरान कोई IOException हुआ हो. अगर अनुरोध पूरा नहीं हुआ है, तो इससे अनुरोध पूरा नहीं हो पाएगा. हालांकि, अगर अनुरोध पूरा हो गया है, तो इसे लॉग किया जाएगा.

getLength

public abstract long getLength()

अगर यह नॉन-चंक्ड अपलोड है, तो यह अपलोड की लंबाई दिखाता है. अगर यह चंक्ड अपलोड है, तो इसे हमेशा -1 दिखाना चाहिए.

रिटर्न
long

नॉन-चंक्ड अपलोड के लिए, अपलोड की लंबाई. इसके अलावा, -1.

अपवाद
java.io.IOException

अगर प्रोसेस के दौरान कोई IOException हुआ हो.

read

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

अपलोड किए जाने वाले डेटा को byteBuffer में पढ़ता है. पूरा होने पर, बफ़र की पोज़िशन को उन बाइट के आखिर तक अपडेट किया जाता है जिन्हें पढ़ा गया था. बफ़र की सीमा में कोई बदलाव नहीं किया जाता. इस मेथड को हर बार कॉल करने के बाद, uploadDataSink को एक बार कॉल करना ज़रूरी है. यह कॉल, सिंक या एसिंक्रोनस हो सकता है. अगर कॉल सफल होता है, तो onReadSucceeded और अगर कॉल में गड़बड़ी होती है, तो onReadError को कॉल किया जाता है. इनमें से किसी एक मेथड या दूसरे मेथड को कॉल किए जाने तक, न तो रीड और न ही रिवाइंड को कॉल किया जाएगा. अगर इससे जुड़ा UrlRequest रद्द कर दिया जाता है, तब भी संसाधनों को सुरक्षित तरीके से रिलीज़ करने से पहले, इनमें से किसी एक को कॉल करना ज़रूरी है. अपवाद होने पर भी, संसाधन रिलीज़ हो जाएंगे और अनुरोध में गड़बड़ी दिखेगी.

ध्यान दें: नॉन-चंक्ड अपलोड के लिए, onReadSucceeded को सिर्फ़ तब कॉल किया जाना चाहिए, जब रीड सफल हो गया हो और byteBuffer में कम से कम एक बाइट पढ़ी गई हो. चंक्ड अपलोड के लिए (डेटा का साइज़ पता नहीं होता), खाली बाइट बफ़र के साथ आखिरी चंक के लिए onReadSucceeded को कॉल किया जा सकता है.

पैरामीटर
UploadDataSink uploadDataSink

रीड पूरा होने पर, सूचना देने वाला ऑब्जेक्ट.

ByteBuffer byteBuffer

रीड की गई बाइट को कॉपी करने के लिए बफ़र. byteBuffer की सीमा में बदलाव न करें.

अपवाद
java.io.IOException

अगर प्रोसेस के दौरान कोई IOException हुआ हो. थ्रो किए गए अपवाद को CallbackException की वजह के तौर पर सेट करके, onFailed को कॉल किया जाएगा.

rewind

public abstract void rewind(UploadDataSink uploadDataSink)

अपलोड किए जाने वाले डेटा को शुरुआत में रिवाइंड करता है. इसे तब शुरू किया जाता है, जब Cronet को अपलोड किए जाने वाले डेटा के लिए, ऐसे डेटा की ज़रूरत होती है जिसे read को कॉल किए बिना ही ऐक्सेस किया जा सके.

यह बताने के लिए कि ऑपरेशन पूरा हो गया है, इस फ़ंक्शन के लागू करने वाले व्यक्ति को onRewindSucceeded को कॉल करके यह बताना होगा कि ऑपरेशन सफल रहा. वहीं, अगर ऑपरेशन में गड़बड़ी हुई है, तो onRewindError को कॉल करना होगा. अगर इससे जुड़ा UrlRequest रद्द कर दिया जाता है, तब भी संसाधनों को सुरक्षित तरीके से रिलीज़ करने से पहले, इनमें से किसी एक को कॉल करना ज़रूरी है. मेथड से अपवाद थ्रो करना, onRewindError को कॉल करने जैसा ही है. अगर रिवाइंड करने की सुविधा उपलब्ध नहीं है (उदाहरण के लिए, अगर एक बार इस्तेमाल होने वाली स्ट्रीम से रीड किया जा रहा है), तो इसे तुरंत onRewindError को कॉल करना चाहिए.

लागू करने वाला व्यक्ति यह मान सकता है कि सिंक को यह सूचना देने तक कि रिवाइंड करने की प्रोसेस पूरी हो गई है, न तो read और न ही एक साथ rewind को कॉल किया जाएगा. इसके बारे में, पिछले पैराग्राफ़ में बताया गया है.

अगर बॉडी को एक से ज़्यादा बार अपलोड करना है, तो Cronet इस मेथड का इस्तेमाल इंटरनल तौर पर करता है. ऐसा कई अलग-अलग स्थितियों में हो सकता है. उदाहरण के लिए, रीडायरेक्ट को फ़ॉलो करते समय या टाइम आउट या नेटवर्क डिसकनेक्ट होने के बाद, अनुरोधों को फिर से करने पर. ध्यान दें कि आम तौर पर, रिवाइंड करने की सुविधा को लागू करना ज़रूरी नहीं है. हालांकि, जिन अनुरोधों के लिए इसकी ज़रूरत होती है वे तब तक पूरे नहीं हो पाएंगे, जब तक रिवाइंड करने की सुविधा लागू नहीं की जाती.

पैरामीटर
UploadDataSink uploadDataSink

रिवाइंड करने का ऑपरेशन पूरा होने पर, सूचना देने वाला ऑब्जेक्ट. यह ऑपरेशन सफल भी हो सकता है और इसमें गड़बड़ी भी हो सकती है.

अपवाद
java.io.IOException

अगर प्रोसेस के दौरान कोई IOException हुआ हो. थ्रो किए गए अपवाद को CallbackException की वजह के तौर पर सेट करके, onFailed को कॉल किया जाएगा.