UploadDataProvider

public abstract class UploadDataProvider implements Closeable


Абстрактный класс, позволяющий встраивающему сервису передавать тело запроса UrlRequest для загрузки. Он поддерживает как неразбивку на части (размер известен заранее), так и разбивку на части (размер неизвестен заранее). Следует учитывать, что не все серверы поддерживают разбивку на части.

Загрузка данных либо всегда осуществляется по частям (если данные отправляются более одного раза), либо происходит по частям.

Краткое содержание

Государственные строители

Общедоступные методы

void
close ()

Вызывается, когда этот UploadDataProvider больше не требуется для запроса, чтобы ресурсы (например, файл) можно было явно освободить.

abstract long

Если загрузка осуществляется без разбивки на блоки, возвращается длина загружаемого файла.

abstract void
read ( UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Считывает и загружает данные в byteBuffer .

abstract void
rewind ( UploadDataSink uploadDataSink)

Функция перемотки загружает данные в начало.

Государственные строители

UploadDataProvider

public UploadDataProvider()

Общедоступные методы

закрывать

public void close()

Вызывается, когда этот UploadDataProvider больше не требуется для запроса, чтобы ресурсы (например, файл) можно было явно освободить.

Броски
java.io.IOException

Если в процессе возникнет какое-либо исключение ввода-вывода (IOException), это приведет к сбою запроса, если он еще не завершен; в противном случае это будет зарегистрировано в журнале.

getLength

public abstract long getLength()

Если загрузка выполняется без разбивки на блоки, возвращается длина загружаемого файла. Если загрузка выполняется с разбивкой на блоки, всегда возвращается -1.

Возвраты
long

Длина загружаемого файла для файлов, не разбитых на блоки, -1 в противном случае.

Броски
java.io.IOException

если в процессе возникнут какие-либо исключения ввода-вывода.

читать

public abstract void read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

Метод `read` загружает данные в byteBuffer . После завершения операции позиция буфера обновляется до конца прочитанных байтов. Лимит буфера не изменяется. Каждый вызов этого метода должен сопровождаться одним вызовом метода uploadDataSink , синхронным или асинхронным: onReadSucceeded в случае успеха или onReadError в случае неудачи. Методы `read` и `rewind` не будут вызываться до тех пор, пока не будет вызван один из этих методов. Даже если связанный с ним UrlRequest будет отменен, один из этих методов все равно должен быть вызван, прежде чем ресурсы можно будет безопасно освободить. Выброс исключения также приведет к освобождению ресурсов и ошибке запроса.

Примечание: Для загрузки данных без разбивки на блоки onReadSucceeded следует производить только в том случае, если чтение прошло успешно и в byteBuffer был считан хотя бы один байт. Для загрузки данных с разбивкой на блоки (размер данных неизвестен) вызов функции onReadSucceeded допускается только для последнего блока с пустым буфером byteBuffer.

Параметры
UploadDataSink uploadDataSink

Объект, которому необходимо отправить уведомление о завершении чтения.

ByteBuffer byteBuffer

Буфер, в который будут скопированы прочитанные байты. Не изменяйте значение параметра byteBuffer.

Броски
java.io.IOException

Если в процессе возникнет какое-либо исключение IOException, будет вызван onFailed , в котором в качестве причины CallbackException будет указано выброшенное исключение.

перемотка назад

public abstract void rewind(UploadDataSink uploadDataSink)

Откатывает загружаемые данные к началу. Вызывается, когда Cronet требует, чтобы поставщик загружаемых данных находился в состоянии, аналогичном тому, как если бы вызов read еще не был произведен.

Чтобы сигнализировать о завершении операции, реализация этой функции должна вызывать метод onRewindSucceeded для подтверждения успеха или onRewindError в случае неудачи. Даже если связанный с ним UrlRequest отменен, необходимо вызвать один из этих методов, прежде чем ресурсы можно будет безопасно освободить. Выброс исключения из метода эквивалентен вызову onRewindError . Если перемотка назад не поддерживается (например, при чтении из одноразового потока), следует немедленно вызвать onRewindError .

Разработчик может с уверенностью предположить, что ни read , ни одновременный вызов rewind не будут выполнены до тех пор, пока он не уведомит приемник о завершении перемотки, как описано в предыдущем абзаце.

Этот метод используется внутри Cronet, если тело запроса необходимо загрузить несколько раз. Это может происходить в самых разных ситуациях, например, при перенаправлении или при повторных запросах после истечения таймаута или разрыва сетевого соединения. Следует отметить, что хотя реализация механизма перемотки обычно является необязательной, запросы, которые в конечном итоге потребуют его использования, завершатся с ошибкой, если механизм перемотки не будет реализован.

Параметры
UploadDataSink uploadDataSink

Объект, которому необходимо отправить уведомление о завершении операции перемотки, успешном или нет.

Броски
java.io.IOException

Если в процессе возникнет какое-либо исключение IOException, будет вызван onFailed , в котором в качестве причины CallbackException будет указано выброшенное исключение.