UploadDataProvider

public abstract class UploadDataProvider implements Closeable


Classe abstrata que permite ao incorporador fornecer um corpo de upload para UrlRequest. Ela oferece suporte a uploads não divididos em partes (tamanho conhecido com antecedência) e divididos em partes (tamanho desconhecido com antecedência). Nem todos os servidores oferecem suporte a uploads divididos em partes.

Um upload é sempre dividido em partes, em vários uploads se os dados acabarem sendo enviados mais de uma vez, ou nunca.

Resumo

Construtores públicos

Métodos públicos

void

Chamado quando esse UploadDataProvider não é mais necessário para uma solicitação, para que os recursos (como um arquivo) possam ser liberados explicitamente.

abstract long

Se for um upload não dividido em partes, retorna o comprimento do upload.

abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Lê os dados de upload em byteBuffer.

abstract void
rewind(UploadDataSink uploadDataSink)

Rebobina os dados de upload para o início.

Construtores públicos

UploadDataProvider

public UploadDataProvider()

Métodos públicos

fechar

public void close()

Chamado quando esse UploadDataProvider não é mais necessário para uma solicitação, para que os recursos (como um arquivo) possam ser liberados explicitamente.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo. Isso fará com que a solicitação falhe se ainda não estiver concluída. Caso contrário, ela será registrada.

getLength

public abstract long getLength()

Se for um upload não dividido em partes, retorna o comprimento do upload. Sempre retorna -1 se for um upload dividido em partes.

Retorna
long

o comprimento do upload para uploads não divididos em partes, -1 caso contrário.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo.

Lidos

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Lê os dados de upload em byteBuffer. Após a conclusão, a posição do buffer é atualizada para o final dos bytes lidos. O limite do buffer não é alterado. Cada chamada desse método precisa ser seguida por uma única chamada, síncrona ou assíncrona, para uploadDataSink: onReadSucceeded em caso de sucesso ou onReadError em caso de falha. Nem a leitura nem o rebobinamento serão chamados até que um desses métodos ou o outro seja chamado. Mesmo que o UrlRequest associado seja cancelado, um ou outro ainda precisa ser chamado antes que os recursos possam ser liberados com segurança. Gerar uma exceção também resultará na liberação de recursos e na falha da solicitação.

Observação: para uploads não divididos em partes, onReadSucceeded só precisa ser chamado quando a leitura for bem-sucedida e pelo menos um byte tiver sido lido em byteBuffer. Para uploads divididos em partes (o tamanho dos dados é desconhecido), é permitido chamar onReadSucceeded para o último bloco com um buffer de bytes vazio.

Parâmetros
UploadDataSink uploadDataSink

O objeto a ser notificado quando a leitura for concluída.

ByteBuffer byteBuffer

O buffer para copiar os bytes lidos. Não altere o limite do byteBuffer.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo. onFailed será chamado com a exceção gerada definida como a causa da CallbackException.

rebobinar

public abstract void rewind(UploadDataSink uploadDataSink)

Rebobina os dados de upload para o início. É invocado quando o Cronet exige que o provedor de dados de upload esteja em um estado equivalente a como se read nunca tivesse sido chamado.

Para sinalizar que a operação foi concluída, as implementações dessa função precisam chamar onRewindSucceeded para indicar sucesso ou onRewindError em caso de falha. Mesmo que o UrlRequest associado seja cancelado, um ou outro ainda precisa ser chamado antes que os recursos possam ser liberados com segurança. Gerar uma exceção do método é equivalente a chamar onRewindError. Se o rebobinamento for indisponível (por exemplo, se a leitura for de um stream único), isso precisará chamar onRewindError imediatamente.

O implementador pode presumir com segurança que nem read nem uma chamada rewind simultânea serão emitidas até que notifiquem o coletor de que o rebobinamento foi concluído, conforme descrito no parágrafo anterior.

Esse método é usado internamente pelo Cronet se o corpo precisar ser enviado várias vezes. Isso pode ocorrer em muitas situações diferentes, por exemplo, ao seguir redirecionamentos ou ao tentar novamente as solicitações após um tempo limite ou uma desconexão de rede. Embora a implementação do rebobinamento seja geralmente opcional, as solicitações que acabam exigindo isso falharão, a menos que o rebobinamento seja implementado.

Parâmetros
UploadDataSink uploadDataSink

O objeto a ser notificado quando a operação de rebobinamento for concluída, com sucesso ou não.

Gera
java.io.IOException

se ocorrer alguma IOException durante o processo. onFailed será chamado com a exceção gerada definida como a causa da CallbackException.