UploadDataProvider

public abstract class UploadDataProvider implements 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

Metodi pubblici

void

Chiamato 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 void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Legge i dati di caricamento in byteBuffer.

abstract void
rewind(UploadDataSink uploadDataSink)

Riporta i dati di caricamento all'inizio.

Costruttori pubblici

UploadDataProvider

public UploadDataProvider()

Metodi pubblici

close

public void close()

Chiamato 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 un'eccezione IOException durante il processo. Se la richiesta non è ancora completata, verrà generato un errore. In caso contrario, verrà registrata.

getLength

public abstract long getLength()

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 un'eccezione IOException durante il processo.

read

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

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. Né read né rewind verranno chiamati finché non viene chiamato uno di questi metodi. Anche se la UrlRequest associata viene annullata, è necessario chiamare uno dei due metodi 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 un'eccezione IOException durante il processo. Verrà chiamato onFailed con l'eccezione generata impostata come causa di CallbackException.

rewind

public abstract void rewind(UploadDataSink uploadDataSink)

Riporta i dati di caricamento all'inizio. Viene richiamato quando Cronet richiede che il fornitore 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 uno dei due metodi prima che le risorse possano essere liberate in sicurezza. Se viene generata un'eccezione dal metodo, è come 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 alcuna chiamata read o 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 in genere 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 un'eccezione IOException durante il processo. Verrà chiamato onFailed con l'eccezione generata impostata come causa di CallbackException.