UploadDataProvider

public abstract class UploadDataProvider implements Closeable


Clase abstracta que permite que el incorporador proporcione un cuerpo de carga a UrlRequest. Admite cargas no fragmentadas (tamaño conocido de forma anticipada) y fragmentadas (tamaño desconocido de forma anticipada). Ten en cuenta que no todos los servidores admiten cargas fragmentadas.

Una carga siempre está fragmentada en varias cargas si los datos se envían más de una vez o nunca se fragmentan.

Resumen

Constructores públicos

Métodos públicos

void

Se llama cuando una solicitud ya no necesita este UploadDataProvider, de modo que los recursos (como un archivo) se puedan liberar de forma explícita.

abstract long

Si se trata de una carga no fragmentada, muestra la longitud de la carga.

abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Lee los datos de carga en byteBuffer.

abstract void
rewind(UploadDataSink uploadDataSink)

Rebobina los datos de carga al principio.

Constructores públicos

UploadDataProvider

public UploadDataProvider()

Métodos públicos

cerrar

public void close()

Se llama cuando una solicitud ya no necesita este UploadDataProvider, de modo que los recursos (como un archivo) se puedan liberar de forma explícita.

Arroja
java.io.IOException

si se produjo alguna IOException durante el proceso. Esto hará que falle la solicitud si aún no se completó; de lo contrario, se registrará.

getLength

public abstract long getLength()

Si se trata de una carga no fragmentada, muestra la longitud de la carga. Siempre debe mostrar -1 si se trata de una carga fragmentada.

Muestra
long

la longitud de la carga para cargas no fragmentadas; de lo contrario, -1.

Arroja
java.io.IOException

si se produjo alguna IOException durante el proceso.

read

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Lee los datos de carga en byteBuffer. Una vez completada, la posición del búfer se actualiza al final de los bytes que se leyeron. No se cambia el límite del búfer. Cada llamada a este método debe ir seguida de una sola llamada, ya sea síncrona o asíncrona, a uploadDataSink: onReadSucceeded si se realiza correctamente o onReadError si falla. No se llamará a read ni a rewind hasta que se llame a uno de esos métodos o al otro. Incluso si se cancela el UrlRequest asociado, se debe llamar a uno o al otro antes de que se puedan liberar los recursos de forma segura. Si se arroja una excepción, también se liberarán los recursos y se producirá un error en la solicitud.

Nota: Para las cargas no fragmentadas, se debe llamar a onReadSucceeded solo cuando la lectura se haya realizado correctamente y se haya leído al menos un byte en byteBuffer. Para las cargas fragmentadas (se desconoce el tamaño de los datos), se permite llamar a onReadSucceeded para el último fragmento con un búfer de bytes vacío.

Parámetros
UploadDataSink uploadDataSink

El objeto para notificar cuando se complete la lectura.

ByteBuffer byteBuffer

El búfer en el que se copiarán los bytes leídos. No cambies el límite de byteBuffer.

Arroja
java.io.IOException

si se produjo alguna IOException durante el proceso. Se llamará a onFailed con la excepción arrojada establecida como la causa de CallbackException.

Retroceder

public abstract void rewind(UploadDataSink uploadDataSink)

Rebobina los datos de carga al principio. Se invoca cuando Cronet requiere que el proveedor de datos de carga esté en un estado equivalente a si aún no se llamó a read.

Para indicar que la operación finalizó, las implementaciones de esta función deben llamar a onRewindSucceeded para indicar que se realizó correctamente o a onRewindError si falla. Incluso si se cancela el UrlRequest asociado, se debe llamar a uno o al otro antes de que se puedan liberar los recursos de forma segura. Arrojar una excepción desde el método equivale a llamar a onRewindError. Si no se admite el rebobinado (por ejemplo, si se lee desde una transmisión única), se debe llamar a onRewindError de inmediato.

El implementador puede suponer de forma segura que no se emitirá una llamada read ni una llamada rewind simultánea hasta que notifique al receptor que finalizó el rebobinado, como se describe en el párrafo anterior.

Cronet usa este método de forma interna si el cuerpo debe subirse varias veces. Esto puede ocurrir en muchas situaciones diferentes, por ejemplo, cuando se siguen redireccionamientos o cuando se reintentan solicitudes después de un tiempo de espera o una desconexión de red. Ten en cuenta que, si bien la implementación del rebobinado suele ser opcional, las solicitudes que terminan requiriéndolo fallarán a menos que se implemente el rebobinado.

Parámetros
UploadDataSink uploadDataSink

El objeto para notificar cuando se complete la operación de rebobinado, ya sea correctamente o no.

Arroja
java.io.IOException

si se produjo alguna IOException durante el proceso. Se llamará a onFailed con la excepción arrojada establecida como la causa de CallbackException.