UploadDataProvider

abstract class UploadDataProvider : Closeable


Class abstrak yang memungkinkan penyematan menyediakan isi upload ke UrlRequest. Class ini mendukung upload non-chunked (ukuran diketahui sebelumnya) dan chunked (ukuran tidak diketahui sebelumnya). Perlu diketahui bahwa tidak semua server mendukung upload chunked.

Upload selalu di-chunk, di beberapa upload jika data akhirnya dikirim lebih dari satu kali, atau tidak pernah di-chunk.

Ringkasan

Konstruktor publik

Fungsi publik

Unit

Dipanggil saat UploadDataProvider ini tidak lagi diperlukan oleh permintaan, sehingga resource (seperti file) dapat dilepaskan secara eksplisit.

abstract Long

Jika ini adalah upload non-chunked, akan menampilkan panjang upload.

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

Membaca data upload ke byteBuffer.

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

Memundurkan data upload ke awal.

Konstruktor publik

UploadDataProvider

UploadDataProvider()

Fungsi publik

tutup

fun close(): Unit

Dipanggil saat UploadDataProvider ini tidak lagi diperlukan oleh permintaan, sehingga resource (seperti file) dapat dilepaskan secara eksplisit.

Menampilkan
java.io.IOException

jika ada IOException yang terjadi selama proses. Hal ini akan menyebabkan permintaan gagal jika belum selesai; jika tidak, permintaan akan dicatat.

getLength

abstract fun getLength(): Long

Jika ini adalah upload non-chunked, akan menampilkan panjang upload. Harus selalu menampilkan -1 jika ini adalah upload chunked.

Hasil
Long

panjang upload untuk upload non-chunked, -1 jika tidak.

Menampilkan
java.io.IOException

jika ada IOException yang terjadi selama proses.

baca

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

Membaca data upload ke byteBuffer. Setelah selesai, posisi buffer akan diperbarui ke akhir byte yang dibaca. Batas buffer tidak diubah. Setiap panggilan metode ini harus diikuti oleh satu panggilan, baik sinkron maupun asinkron, ke uploadDataSink: onReadSucceeded jika berhasil atau onReadError jika gagal. Pembacaan maupun pemunduran tidak akan dipanggil hingga salah satu metode tersebut atau metode lainnya dipanggil. Meskipun UrlRequest terkait dibatalkan, salah satu metode tersebut harus tetap dipanggil sebelum resource dapat dilepaskan dengan aman. Menampilkan pengecualian juga akan menyebabkan resource dilepaskan dan permintaan mengalami error.

Catatan: Untuk upload non-chunked, onReadSucceeded hanya boleh dipanggil jika pembacaan berhasil dan setidaknya satu byte telah dibaca ke dalam byteBuffer. Untuk upload chunked (Ukuran data tidak diketahui), Anda dapat memanggil onReadSucceeded untuk potongan terakhir dengan buffer byte kosong.

Parameter
uploadDataSink: UploadDataSink!

Objek yang akan diberi tahu saat pembacaan selesai.

byteBuffer: ByteBuffer!

Buffer untuk menyalin byte yang dibaca. Jangan ubah batas byteBuffer.

Menampilkan
java.io.IOException

jika ada IOException yang terjadi selama proses. onFailed akan dipanggil dengan pengecualian yang ditampilkan ditetapkan sebagai penyebab CallbackException.

mundur

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

Memundurkan data upload ke awal. Dipanggil saat Cronet memerlukan penyedia data upload berada dalam status yang setara dengan jika read belum pernah dipanggil.

Untuk memberi sinyal bahwa operasi telah selesai, penerapan fungsi ini harus memanggil onRewindSucceeded untuk menunjukkan keberhasilan, atau onRewindError jika gagal. Meskipun UrlRequest terkait dibatalkan, salah satu metode tersebut harus tetap dipanggil sebelum resource dapat dilepaskan dengan aman. Menampilkan pengecualian dari metode ini setara dengan memanggil onRewindError. Jika pemunduran tidak didukung (misalnya, jika membaca dari aliran satu kali), metode ini harus segera memanggil onRewindError.

Pelaksana dapat dengan aman mengasumsikan bahwa read maupun panggilan rewind serentak tidak akan dikeluarkan hingga mereka memberi tahu sink bahwa pemunduran telah selesai, seperti yang dijelaskan di paragraf sebelumnya.

Metode ini digunakan secara internal oleh Cronet jika isi harus diupload beberapa kali. Hal ini dapat terjadi dalam berbagai situasi, misalnya saat mengikuti pengalihan, atau saat mencoba ulang permintaan setelah waktu tunggu habis atau jaringan terputus. Perhatikan bahwa meskipun penerapan pemunduran umumnya bersifat opsional, permintaan yang akhirnya memerlukannya akan gagal kecuali jika pemunduran diterapkan.

Parameter
uploadDataSink: UploadDataSink!

Objek yang akan diberi tahu saat operasi pemunduran selesai, baik berhasil maupun tidak.

Menampilkan
java.io.IOException

jika ada IOException yang terjadi selama proses. onFailed akan dipanggil dengan pengecualian yang ditampilkan ditetapkan sebagai penyebab CallbackException.