UploadDataProvider

public abstract class UploadDataProvider implements Closeable


Classe abstraite permettant à l'intégrateur de fournir un corps d'importation à UrlRequest. Elle est compatible avec les importations non fragmentées (taille connue à l'avance) et fragmentées (taille inconnue à l'avance). Sachez que tous les serveurs ne sont pas compatibles avec les importations fragmentées.

Une importation est toujours fragmentée, sur plusieurs importations si les données finissent par être envoyées plusieurs fois, ou jamais fragmentée.

Résumé

Constructeurs publics

Méthodes publiques

void

Appelée lorsque cette UploadDataProvider n'est plus nécessaire pour une requête, afin que les ressources (comme un fichier) puissent être explicitement libérées.

abstract long

S'il s'agit d'une importation non fragmentée, renvoie la longueur de l'importation.

abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Lit les données d'importation dans byteBuffer.

abstract void
rewind(UploadDataSink uploadDataSink)

Remet les données d'importation au début.

Constructeurs publics

UploadDataProvider

public UploadDataProvider()

Méthodes publiques

fermer

public void close()

Appelée lorsque cette UploadDataProvider n'est plus nécessaire pour une requête, afin que les ressources (comme un fichier) puissent être explicitement libérées.

Génère
java.io.IOException

si une IOException s'est produite au cours du processus. La requête échouera si elle n'est pas encore terminée. Sinon, elle sera enregistrée.

getLength

public abstract long getLength()

S'il s'agit d'une importation non fragmentée, renvoie la longueur de l'importation. Doit toujours renvoyer -1 s'il s'agit d'une importation fragmentée.

Renvoie
long

la longueur de l'importation pour les importations non fragmentées, -1 sinon.

Génère
java.io.IOException

si une IOException s'est produite au cours du processus.

read

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Lit les données d'importation dans byteBuffer. Une fois l'opération terminée, la position du tampon est mise à jour à la fin des octets lus. La limite du tampon n'est pas modifiée. Chaque appel de cette méthode doit être suivi d'un seul appel, synchrone ou asynchrone, à uploadDataSink : onReadSucceeded en cas de succès ou onReadError en cas d'échec. Ni la lecture ni le retour en arrière ne seront appelés tant que l'une de ces méthodes ou l'autre n'est pas appelée. Même si la UrlRequest associée est annulée, l'une ou l'autre doit toujours être appelée avant que les ressources puissent être libérées en toute sécurité. La génération d'une exception entraînera également la libération des ressources et l'échec de la requête.

Remarque : Pour les importations non fragmentées, onReadSucceeded ne doit être appelé que lorsque la lecture a réussi et qu'au moins un octet a été lu dans byteBuffer. Pour les importations fragmentées (la taille des données est inconnue), il est autorisé d'appeler onReadSucceeded pour le dernier fragment avec un tampon d'octets vide.

Paramètres
UploadDataSink uploadDataSink

Objet à notifier une fois la lecture terminée.

ByteBuffer byteBuffer

Tampon dans lequel copier les octets lus. Ne modifiez pas la limite de byteBuffer.

Génère
java.io.IOException

si une IOException s'est produite au cours du processus. onFailed sera appelé avec l'exception générée définie comme cause de la CallbackException.

rewind

public abstract void rewind(UploadDataSink uploadDataSink)

Remet les données d'importation au début. Appelée lorsque Cronet exige que le fournisseur de données d'importation soit dans un état équivalent à celui où read n'a pas encore été appelé.

Pour signaler que l'opération est terminée, les implémentations de cette fonction doivent appeler onRewindSucceeded pour indiquer la réussite ou onRewindError en cas d'échec. Même si la UrlRequest associée est annulée, l'une ou l'autre doit toujours être appelée avant que les ressources puissent être libérées en toute sécurité. La génération d'une exception à partir de la méthode équivaut à appeler onRewindError. Si le retour en arrière n'est pas compatible (par exemple, si la lecture provient d'un flux unique), cette méthode doit appeler onRewindError immédiatement.

L'implémenteur peut supposer en toute sécurité qu'aucun appel read ni rewind simultané ne sera émis tant qu'il n'aura pas notifié au récepteur que le retour en arrière est terminé, comme décrit dans le paragraphe précédent.

Cette méthode est utilisée en interne par Cronet si le corps doit être importé plusieurs fois. Cela peut se produire dans de nombreuses situations différentes, par exemple lors du suivi des redirections ou lors de nouvelles tentatives de requêtes après un délai d'inactivité ou une déconnexion réseau. Notez que, bien que l'implémentation du retour en arrière soit généralement facultative, les requêtes qui finissent par en avoir besoin échoueront si le retour en arrière n'est pas implémenté.

Paramètres
UploadDataSink uploadDataSink

Objet à notifier une fois l'opération de retour en arrière terminée, qu'elle ait réussi ou non.

Génère
java.io.IOException

si une IOException s'est produite au cours du processus. onFailed sera appelé avec l'exception générée définie comme cause de la CallbackException.