UploadDataProvider

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

Metody publiczne

void

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

Odczytuje dane przesyłane do byteBuffer.

abstract void
rewind(UploadDataSink uploadDataSink)

Przewija dane przesyłane na początek.

Konstruktory publiczne

UploadDataProvider

public UploadDataProvider()

Metody publiczne

zamknij

public void close()

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 IOException. Spowoduje to niepowodzenie żądania, jeśli nie zostało ono jeszcze zakończone. W przeciwnym razie zostanie ono zarejestrowane.

getLength

public abstract long getLength()

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 bez podziału na części, w przeciwnym razie -1.

Zgłasza
java.io.IOException

jeśli podczas procesu wystąpi jakikolwiek IOException.

przeczytane

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

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 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ć 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 IOException. Wywołana zostanie funkcja onFailed, a zgłoszony wyjątek zostanie ustawiony jako przyczyna CallbackException.

przewiń wstecz

public abstract void rewind(UploadDataSink uploadDataSink)

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 nie wywołano jeszcze metody read.

Aby zasygnalizować zakończenie operacji, implementacje tej funkcji muszą wywołać onRewindSucceeded, aby wskazać powodzenie, lub onRewindError w przypadku niepowodzenia. 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 onRewindError. Jeśli przewijanie nie jest obsługiwane (np. w przypadku odczytu ze strumienia jednorazowego), należy natychmiast wywołać onRewindError.

Implementator 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 rewind.

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

Parametry
UploadDataSink uploadDataSink

Obiekt, który ma zostać powiadomiony o zakończeniu operacji przewijania, niezależnie od tego, czy się powiodła.

Zgłasza
java.io.IOException

jeśli podczas procesu wystąpi jakikolwiek IOException. Wywołana zostanie funkcja onFailed, a zgłoszony wyjątek zostanie ustawiony jako przyczyna CallbackException.