UploadDataProvider

public abstract class UploadDataProvider implements Closeable


คลาสแอบสแตรกต์ที่อนุญาตให้ผู้ฝังตัวระบุเนื้อหาการอัปโหลดไปยัง UrlRequest โดยรองรับการอัปโหลดทั้งแบบไม่แบ่งเป็นส่วนๆ (ทราบขนาดล่วงหน้า) และแบบแบ่งเป็นส่วนๆ (ไม่ทราบขนาดล่วงหน้า) โปรดทราบว่าเซิร์ฟเวอร์บางเครื่องไม่รองรับการอัปโหลดแบบแบ่งเป็นส่วนๆ

การอัปโหลดจะแบ่งเป็นส่วนๆ เสมอในการอัปโหลดหลายครั้งหากมีการส่งข้อมูลมากกว่า 1 ครั้ง หรือไม่แบ่งเป็นส่วนๆ เลย

สรุป

เครื่องมือสร้างสาธารณะ

เมธอดสาธารณะ

void

เรียกใช้เมื่อคำขอไม่จำเป็นต้องใช้ UploadDataProvider นี้อีกต่อไป เพื่อให้ระบบปล่อยทรัพยากร (เช่น ไฟล์) ได้อย่างชัดเจน

abstract long

หากเป็นการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ เมธอดนี้จะแสดงความยาวของการอัปโหลด

abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

อ่านข้อมูลการอัปโหลดลงใน byteBuffer

abstract void
rewind(UploadDataSink uploadDataSink)

กรอกลับข้อมูลการอัปโหลดไปที่จุดเริ่มต้น

เครื่องมือสร้างสาธารณะ

UploadDataProvider

public UploadDataProvider()

เมธอดสาธารณะ

ปิด

public void close()

เรียกใช้เมื่อคำขอไม่จำเป็นต้องใช้ UploadDataProvider นี้อีกต่อไป เพื่อให้ระบบปล่อยทรัพยากร (เช่น ไฟล์) ได้อย่างชัดเจน

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ ซึ่งจะทำให้คำขอไม่สำเร็จหากยังไม่เสร็จสมบูรณ์ หรือระบบจะบันทึกข้อผิดพลาด

getLength

public abstract long getLength()

หากเป็นการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ เมธอดนี้จะแสดงความยาวของการอัปโหลด และต้องแสดงผล -1 เสมอหากเป็นการอัปโหลดแบบแบ่งเป็นส่วนๆ

การคืนสินค้า
long

ความยาวของการอัปโหลดสำหรับการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ หรือ -1 ในกรณีอื่นๆ

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ

อ่านแล้ว

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

อ่านข้อมูลการอัปโหลดลงใน byteBuffer เมื่อเสร็จสมบูรณ์แล้ว ระบบจะอัปเดตตำแหน่งของบัฟเฟอร์เป็นจุดสิ้นสุดของไบต์ที่อ่าน และจะไม่เปลี่ยนแปลงขีดจำกัดของบัฟเฟอร์ การเรียกใช้เมธอดนี้แต่ละครั้งต้องตามด้วยการเรียกใช้ uploadDataSink เพียงครั้งเดียว ไม่ว่าจะเป็นแบบซิงโครนัสหรืออะซิงโครนัส โดยจะเรียกใช้ onReadSucceeded หากสำเร็จ หรือ onReadError หากไม่สำเร็จ ระบบจะไม่เรียกใช้ทั้งการอ่านและการกรอกลับจนกว่าจะมีการเรียกใช้เมธอดใดเมธอดหนึ่ง แม้ว่าจะมีการยกเลิก UrlRequest ที่เชื่อมโยงแล้ว แต่ระบบก็ยังต้องเรียกใช้เมธอดใดเมธอดหนึ่งก่อนจึงจะปล่อยทรัพยากรได้อย่างปลอดภัย การส่งข้อยกเว้นจะทำให้ระบบปล่อยทรัพยากรและทำให้คำขอเกิดข้อผิดพลาดด้วย

หมายเหตุ: สำหรับการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ ควรเรียกใช้ onReadSucceeded ก็ต่อเมื่อการอ่านสำเร็จและมีการอ่านไบต์อย่างน้อย 1 ไบต์ลงใน byteBuffer สำหรับการอัปโหลดแบบแบ่งเป็นส่วนๆ (ไม่ทราบขนาดของข้อมูล) ระบบจะอนุญาตให้เรียกใช้ onReadSucceeded สำหรับส่วนสุดท้ายที่มีบัฟเฟอร์ไบต์ว่าง

พารามิเตอร์
UploadDataSink uploadDataSink

ออบเจ็กต์ที่จะแจ้งให้ทราบเมื่อการอ่านเสร็จสมบูรณ์

ByteBuffer byteBuffer

บัฟเฟอร์ที่จะคัดลอกไบต์ที่อ่าน ห้ามเปลี่ยนขีดจำกัดของ byteBuffer

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ ระบบจะเรียกใช้ onFailed โดยตั้งค่าข้อยกเว้นที่ส่งเป็นสาเหตุของ CallbackException

กรอกลับ

public abstract void rewind(UploadDataSink uploadDataSink)

กรอกลับข้อมูลการอัปโหลดไปที่จุดเริ่มต้น เรียกใช้เมื่อ Cronet ต้องการให้ผู้ให้บริการข้อมูลการอัปโหลดอยู่ในสถานะเทียบเท่ากับกรณีที่ยังไม่เคยเรียกใช้ read

หากต้องการส่งสัญญาณว่าการดำเนินการเสร็จสิ้นแล้ว การใช้งานฟังก์ชันนี้ต้องเรียกใช้ onRewindSucceeded เพื่อระบุว่าสำเร็จ หรือ onRewindError หากไม่สำเร็จ แม้ว่าจะมีการยกเลิก UrlRequest ที่เชื่อมโยงแล้ว แต่ระบบก็ยังต้องเรียกใช้เมธอดใดเมธอดหนึ่งก่อนจึงจะปล่อยทรัพยากรได้อย่างปลอดภัย การส่งข้อยกเว้นจากเมธอดเทียบเท่ากับการเรียกใช้ onRewindError หากระบบไม่รองรับการกรอกลับ (เช่น หากอ่านจากสตรีมแบบครั้งเดียว) เมธอดนี้ควรเรียกใช้ onRewindError ทันที

ผู้ใช้สามารถสันนิษฐานได้อย่างปลอดภัยว่าระบบจะไม่เรียกใช้ทั้ง read และการเรียกใช้ rewind พร้อมกันจนกว่าจะแจ้งให้ Sink ทราบว่าการกรอกลับเสร็จสิ้นแล้ว ตามที่อธิบายไว้ในย่อหน้าก่อนหน้า

Cronet ใช้เมธอดนี้ภายในหากต้องอัปโหลดเนื้อหาหลายครั้ง ซึ่งอาจเกิดขึ้นได้ในหลายสถานการณ์ เช่น เมื่อติดตามการเปลี่ยนเส้นทาง หรือเมื่อลองส่งคำขออีกครั้งหลังจากหมดเวลาหรือเครือข่ายถูกตัดการเชื่อมต่อ โปรดทราบว่าโดยทั่วไปแล้วการใช้งานการกรอกลับเป็นตัวเลือก แต่คำขอที่ต้องใช้การกรอกลับจะล้มเหลวหากไม่มีการใช้งานการกรอกลับ

พารามิเตอร์
UploadDataSink uploadDataSink

ออบเจ็กต์ที่จะแจ้งให้ทราบเมื่อการดำเนินการกรอกลับเสร็จสมบูรณ์ ไม่ว่าจะเป็นการดำเนินการที่สำเร็จหรือไม่ก็ตาม

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ ระบบจะเรียกใช้ onFailed โดยตั้งค่าข้อยกเว้นที่ส่งเป็นสาเหตุของ CallbackException