UploadDataProvider

abstract class UploadDataProvider : Closeable


Klasa abstrakcyjna umożliwiająca osadzającemu dostarczenie treści przesyłanej do UrlRequest. Obsługuje przesyłanie bez podziału na części (rozmiar znany z wyprzedzeniem) i z podziałem na części (rozmiar nieznany z wyprzedzeniem). Pamiętaj, że nie wszystkie serwery obsługują przesyłanie z podziałem na części.

Przesyłanie jest zawsze z podziałem na części, jeśli dane są wysyłane więcej niż raz, lub nigdy nie jest z podziałem na części.

Podsumowanie

Konstruktory publiczne

Funkcje publiczne

Unit

Wywoływana, gdy ten UploadDataProvider nie jest już potrzebny w żądaniu, aby można było jawnie zwolnić zasoby (np. plik).

abstract Long

Jeśli jest to przesyłanie bez podziału na części, zwraca długość przesyłania.

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

Odczytuje dane przesyłane do byteBuffer.

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

Przewija dane przesyłane na początek.

Konstruktory publiczne

UploadDataProvider

UploadDataProvider()

Funkcje publiczne

zamknij

fun close(): Unit

Wywoływana, gdy ten UploadDataProvider nie jest już potrzebny w żądaniu, aby można było jawnie zwolnić zasoby (np. plik).

Zgłasza
java.io.IOException

jeśli podczas procesu wystąpi jakikolwiek wyjątek IOException. Spowoduje to niepowodzenie żądania, jeśli nie zostało ono jeszcze zakończone. W przeciwnym razie zostanie ono zarejestrowane.

getLength

abstract fun getLength(): Long

Jeśli jest to przesyłanie bez podziału na części, zwraca długość przesyłania. Jeśli jest to przesyłanie z podziałem na części, zawsze musi zwracać wartość -1.

Zwraca
Long

długość przesyłania w przypadku przesyłania bez podziału na części, w przeciwnym razie -1.

Zgłasza
java.io.IOException

jeśli podczas procesu wystąpi jakikolwiek wyjątek IOException.

przeczytane

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

Odczytuje dane przesyłane do byteBuffer. Po zakończeniu pozycja bufora jest aktualizowana do końca odczytanych bajtów. Limit bufora nie jest zmieniany. Po każdym wywołaniu tej metody musi nastąpić pojedyncze wywołanie synchroniczne lub asynchroniczne do uploadDataSink: onReadSucceeded w przypadku powodzenia lub onReadError w przypadku niepowodzenia. Dopóki nie zostanie wywołana jedna z tych metod, nie zostanie wywołana ani metoda read, ani rewind. Nawet jeśli powiązane UrlRequest zostanie anulowane, przed bezpiecznym zwolnieniem zasobów należy wywołać jedną z tych metod. Zgłoszenie wyjątku spowoduje również zwolnienie zasobów i błąd żądania.

Uwaga: w przypadku przesyłania bez podziału na części metodę onReadSucceeded należy wywoływać tylko wtedy, gdy odczyt się powiódł i do byteBuffer odczytano co najmniej 1 bajt. W przypadku przesyłania z podziałem na części (rozmiar danych jest nieznany) można wywołać metodę onReadSucceeded dla ostatniej części z pustym buforem bajtów.

Parametry
uploadDataSink: UploadDataSink!

Obiekt, który ma zostać powiadomiony o zakończeniu odczytu.

byteBuffer: ByteBuffer!

Bufor, do którego mają zostać skopiowane odczytane bajty. Nie zmieniaj limitu byteBuffer.

Zgłasza
java.io.IOException

jeśli podczas procesu wystąpi jakikolwiek wyjątek IOException. Metoda onFailed zostanie wywołana z wyjątkiem zgłoszonym jako przyczyna CallbackException.

przewiń wstecz

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

Przewija dane przesyłane na początek. Wywoływana, gdy Cronet wymaga, aby dostawca danych przesyłanych był w stanie równoważnym do stanu, w którym metoda read nie została jeszcze wywołana.

Aby zasygnalizować zakończenie operacji, implementacje tej funkcji muszą wywołać metodę onRewindSucceeded, aby wskazać powodzenie, lub onRewindError, aby wskazać niepowodzenie. Nawet jeśli powiązane UrlRequest zostanie anulowane, przed bezpiecznym zwolnieniem zasobów należy wywołać jedną z tych metod. Zgłoszenie wyjątku z metody jest równoznaczne z wywołaniem metody onRewindError. Jeśli przewijanie nie jest obsługiwane (np. w przypadku odczytu ze strumienia jednorazowego), należy natychmiast wywołać metodę onRewindError.

Implementujący może bezpiecznie założyć, że dopóki nie powiadomi odbiornika o zakończeniu przewijania (jak opisano w poprzednim akapicie), nie zostanie wywołana ani metoda read, ani współbieżne wywołanie metody rewind.

Ta metoda jest używana wewnętrznie przez Cronet, jeśli treść musi zostać przesłana wiele razy. Może to wystąpić w wielu różnych sytuacjach, np. podczas przekierowywania lub ponawiania żądań po przekroczeniu limitu czasu lub rozłączeniu sieci. Pamiętaj, że implementowanie przewijania jest zwykle opcjonalne, ale żądania, które wymagają przewijania, zakończą się niepowodzeniem, jeśli nie zostanie ono zaimplementowane.

Parametry
uploadDataSink: UploadDataSink!

Obiekt, który ma zostać powiadomiony o zakończeniu operacji przewijania (z powodzeniem lub nie).

Zgłasza
java.io.IOException

jeśli podczas procesu wystąpi jakikolwiek wyjątek IOException. Metoda onFailed zostanie wywołana z wyjątkiem zgłoszonym jako przyczyna CallbackException.