UploadDataProvider

public abstract class UploadDataProvider implements Closeable


Abstrakte Klasse, mit der der Einbettungscode einen Upload-Body für UrlRequest bereitstellen kann. Sie unterstützt sowohl nicht aufgeteilte (Größe im Voraus bekannt) als auch aufgeteilte (Größe nicht im Voraus bekannt) Uploads. Beachten Sie, dass nicht alle Server aufgeteilte Uploads unterstützen.

Ein Upload ist entweder immer aufgeteilt, über mehrere Uploads hinweg, wenn die Daten mehr als einmal gesendet werden, oder nie aufgeteilt.

Zusammenfassung

Öffentliche Konstruktoren

Öffentliche Methoden

void

Wird aufgerufen, wenn dieser UploadDataProvider nicht mehr für eine Anfrage benötigt wird, damit Ressourcen (z. B. eine Datei) explizit freigegeben werden können.

abstract long

Gibt bei einem nicht aufgeteilten Upload die Länge des Uploads zurück.

abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Liest Upload-Daten in byteBuffer.

abstract void
rewind(UploadDataSink uploadDataSink)

Spult Upload-Daten an den Anfang zurück.

Öffentliche Konstruktoren

UploadDataProvider

public UploadDataProvider()

Öffentliche Methoden

Schließen

public void close()

Wird aufgerufen, wenn dieser UploadDataProvider nicht mehr für eine Anfrage benötigt wird, damit Ressourcen (z. B. eine Datei) explizit freigegeben werden können.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist. Dadurch schlägt die Anfrage fehl, wenn sie noch nicht abgeschlossen ist. Andernfalls wird sie protokolliert.

getLength

public abstract long getLength()

Gibt bei einem nicht aufgeteilten Upload die Länge des Uploads zurück. Muss bei einem aufgeteilten Upload immer -1 zurückgeben.

Gibt Folgendes zurück:
long

die Länge des Uploads für nicht aufgeteilte Uploads, andernfalls -1.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist.

Lesen

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Liest Upload-Daten in byteBuffer. Nach Abschluss wird die Position des Puffers auf das Ende der gelesenen Byte aktualisiert. Das Limit des Puffers wird nicht geändert. Auf jeden Aufruf dieser Methode muss ein einzelner Aufruf von uploadDataSink folgen, entweder synchron oder asynchron: onReadSucceeded bei Erfolg oder onReadError bei Fehler. Weder „Lesen“ noch „Zurückspulen“ werden aufgerufen, bis eine dieser Methoden oder die andere aufgerufen wird. Auch wenn die zugehörige UrlRequest abgebrochen wird, muss eine der beiden Methoden aufgerufen werden, bevor Ressourcen sicher freigegeben werden können. Wenn eine Ausnahme ausgelöst wird, werden auch Ressourcen freigegeben und die Anfrage schlägt fehl.

Hinweis: Bei nicht aufgeteilten Uploads sollte onReadSucceeded nur aufgerufen werden, wenn das Lesen erfolgreich war und mindestens ein Byte in byteBuffer gelesen wurde. Bei aufgeteilten Uploads (die Größe der Daten ist unbekannt) kann onReadSucceeded für den letzten Teil mit einem leeren Byte-Puffer aufgerufen werden.

Parameter
UploadDataSink uploadDataSink

Das Objekt, das benachrichtigt werden soll, wenn das Lesen abgeschlossen ist.

ByteBuffer byteBuffer

Der Puffer, in den die gelesenen Byte kopiert werden sollen. Ändern Sie das Limit von „byteBuffer“ nicht.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist. onFailed wird aufgerufen, wobei die ausgelöste Ausnahme als Ursache für die CallbackException festgelegt wird.

Zurückspulen

public abstract void rewind(UploadDataSink uploadDataSink)

Spult Upload-Daten an den Anfang zurück. Wird aufgerufen, wenn Cronet erfordert, dass sich der Upload-Datenanbieter in einem Zustand befindet, als wäre read noch nie aufgerufen worden.

Um zu signalisieren, dass der Vorgang abgeschlossen ist, müssen Implementierungen dieser Funktion onRewindSucceeded aufrufen, um den Erfolg anzugeben, oder onRewindError bei einem Fehler. Auch wenn die zugehörige UrlRequest abgebrochen wird, muss eine der beiden Methoden aufgerufen werden, bevor Ressourcen sicher freigegeben werden können. Wenn eine Ausnahme von der Methode ausgelöst wird, entspricht dies dem Aufruf von onRewindError. Wenn das Zurückspulen nicht unterstützt wird (z. B. beim Lesen aus einem einmaligen Stream), sollte onRewindError sofort aufgerufen werden.

Der Implementierer kann davon ausgehen, dass weder read noch ein gleichzeitiger rewind-Aufruf ausgegeben wird, bis er die Senke benachrichtigt, dass das Zurückspulen abgeschlossen ist, wie im vorherigen Absatz beschrieben.

Diese Methode wird intern von Cronet verwendet, wenn der Body mehrmals hochgeladen werden muss. Dies kann in vielen verschiedenen Situationen auftreten, z. B. beim Folgen von Weiterleitungen oder beim Wiederholen von Anfragen nach einem Zeitlimit oder einer Netzwerkunterbrechung. Die Implementierung des Zurückspulens ist zwar im Allgemeinen optional, aber Anfragen, bei denen es erforderlich ist, schlagen fehl, wenn es nicht implementiert ist.

Parameter
UploadDataSink uploadDataSink

Das Objekt, das benachrichtigt werden soll, wenn der Zurückspulvorgang abgeschlossen ist, unabhängig davon, ob er erfolgreich war oder nicht.

Löst aus
java.io.IOException

wenn während des Vorgangs eine IOException aufgetreten ist. onFailed wird aufgerufen, wobei die ausgelöste Ausnahme als Ursache für die CallbackException festgelegt wird.