UploadDataProvider

abstract class UploadDataProvider : Closeable


Classe astratta che consente all'incorporatore di fornire un corpo di caricamento a UrlRequest. Supporta sia i caricamenti non suddivisi in blocchi (dimensione nota in anticipo) sia quelli suddivisi in blocchi (dimensione non nota in anticipo). Tieni presente che non tutti i server supportano i caricamenti suddivisi in blocchi.

Un caricamento è sempre suddiviso in blocchi, in più caricamenti se i dati vengono inviati più di una volta, oppure mai suddiviso in blocchi.

Riepilogo

Costruttori pubblici

Funzioni pubbliche

Unit

Chiamata quando UploadDataProvider non è più necessario per una richiesta, in modo che le risorse (ad esempio un file) possano essere rilasciate in modo esplicito.

abstract Long

Se si tratta di un caricamento non suddiviso in blocchi, restituisce la lunghezza del caricamento.

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

Legge i dati di caricamento in byteBuffer.

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

Riporta i dati di caricamento all'inizio.

Costruttori pubblici

UploadDataProvider

UploadDataProvider()

Funzioni pubbliche

close

fun close(): Unit

Chiamata quando UploadDataProvider non è più necessario per una richiesta, in modo che le risorse (ad esempio un file) possano essere rilasciate in modo esplicito.

Genera
java.io.IOException

se si è verificata una IOException durante il processo. Se la richiesta non è ancora stata completata, verrà generato un errore. In caso contrario, verrà registrata.

getLength

abstract fun getLength(): Long

Se si tratta di un caricamento non suddiviso in blocchi, restituisce la lunghezza del caricamento. Deve sempre restituire -1 se si tratta di un caricamento suddiviso in blocchi.

Resi
Long

la lunghezza del caricamento per i caricamenti non suddivisi in blocchi, -1 in caso contrario.

Genera
java.io.IOException

se si è verificata una IOException durante il processo.

read

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

Legge i dati di caricamento in byteBuffer. Al termine, la posizione del buffer viene aggiornata alla fine dei byte letti. Il limite del buffer non viene modificato. Ogni chiamata di questo metodo deve essere seguita da una singola chiamata, sincrona o asincrona, a uploadDataSink: onReadSucceeded in caso di successo o onReadError in caso di errore. Non verrà chiamata né la lettura né il riavvolgimento finché non viene chiamata una di queste due opzioni. Anche se la UrlRequest associata viene annullata, è necessario chiamare una delle due opzioni prima che le risorse possano essere liberate in sicurezza. Se viene generata un'eccezione, le risorse vengono liberate e la richiesta viene annullata.

Nota: per i caricamenti non suddivisi in blocchi, onReadSucceeded deve essere chiamato solo quando la lettura è riuscita e almeno un byte è stato letto in byteBuffer. Per i caricamenti suddivisi in blocchi (la dimensione dei dati è sconosciuta), è consentito chiamare onReadSucceeded per l'ultimo blocco con un buffer di byte vuoto.

Parametri
uploadDataSink: UploadDataSink!

L'oggetto da notificare al termine della lettura.

byteBuffer: ByteBuffer!

Il buffer in cui copiare i byte letti. Non modificare il limite di byteBuffer.

Genera
java.io.IOException

se si è verificata una IOException durante il processo. Verrà chiamata onFailed con l'eccezione generata impostata come causa di CallbackException.

rewind

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

Riporta i dati di caricamento all'inizio. Viene richiamato quando Cronet richiede che il provider di dati di caricamento si trovi in uno stato equivalente a quello in cui read non è ancora stato chiamato.

Per segnalare che l'operazione è terminata, le implementazioni di questa funzione devono chiamare onRewindSucceeded per indicare l'esito positivo o onRewindError in caso di errore. Anche se la UrlRequest associata viene annullata, è necessario chiamare una delle due opzioni prima che le risorse possano essere liberate in sicurezza. Se viene generata un'eccezione dal metodo, equivale a chiamare onRewindError. Se il riavvolgimento non è supportato (ad esempio, se la lettura avviene da uno stream una tantum), è necessario chiamare immediatamente onRewindError.

L'implementatore può presupporre in sicurezza che non verrà emessa né una chiamata read né una chiamata rewind simultanea finché non notifica al sink che il riavvolgimento è terminato, come descritto nel paragrafo precedente.

Questo metodo viene utilizzato internamente da Cronet se il corpo deve essere caricato più volte. Ciò può verificarsi in molte situazioni diverse, ad esempio quando si seguono i reindirizzamenti o quando si riprovano le richieste dopo un timeout o una disconnessione di rete. Tieni presente che, sebbene l'implementazione del riavvolgimento sia generalmente facoltativa, le richieste che finiscono per richiederlo non andranno a buon fine a meno che non venga implementato il riavvolgimento.

Parametri
uploadDataSink: UploadDataSink!

L'oggetto da notificare al termine dell'operazione di riavvolgimento, con esito positivo o negativo.

Genera
java.io.IOException

se si è verificata una IOException durante il processo. Verrà chiamata onFailed con l'eccezione generata impostata come causa di CallbackException.