UploadDataProvider

abstract class UploadDataProvider : Closeable


抽象类,允许嵌入器向 UrlRequest 提供上传正文。它支持非分块上传(大小已知)和分块上传(大小未知)。请注意,并非所有服务器都支持分块上传。

如果数据最终被发送多次,则上传始终是分块的,或者从不分块。

摘要

公共构造函数

公共函数

Unit

当请求不再需要此 UploadDataProvider 时调用,以便可以显式释放资源(例如文件)。

abstract Long

如果这是非分块上传,则返回上传的长度。

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

将上传数据读取到 byteBuffer 中。

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

将上传数据倒回到开头。

公共构造函数

UploadDataProvider

UploadDataProvider()

公共函数

close

fun close(): Unit

当请求不再需要此 UploadDataProvider 时调用,以便可以显式释放资源(例如文件)。

抛出
java.io.IOException

如果在该过程中发生任何 IOException。如果请求尚未完成,这将导致请求失败;否则,系统会记录该请求。

getLength

abstract fun getLength(): Long

如果这是非分块上传,则返回上传的长度。如果是分块上传,则必须始终返回 -1。

返回
Long

非分块上传的上传长度,否则为 -1。

抛出
java.io.IOException

如果在该过程中发生任何 IOException。

read

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

将上传数据读取到 byteBuffer 中。完成后,缓冲区的指针会更新为读取的字节的末尾。缓冲区的限制不会更改。每次调用此方法后,都必须对 uploadDataSink 进行一次调用(同步或异步):成功时调用 onReadSucceeded,失败时调用 onReadError。在调用其中一个方法之前,不会调用读取或倒回。即使关联的 UrlRequest 被取消,也必须先调用其中一个方法,然后才能安全地释放资源。抛出异常也会导致资源被释放,并且请求出错。

注意:对于非分块上传,只有在读取成功并且至少有一个字节已读取到 byteBuffer 中时,才应调用 onReadSucceeded。对于分块上传(数据大小未知),则允许使用空字节缓冲区为最后一个分块调用 onReadSucceeded

参数
uploadDataSink: UploadDataSink!

读取完成后要通知的对象。

byteBuffer: ByteBuffer!

用于将读取的字节复制到其中的缓冲区。请勿更改 byteBuffer 的限制。

抛出
java.io.IOException

如果在该过程中发生任何 IOException。系统将调用 onFailed,并将抛出的异常设置为 CallbackException 的原因。

rewind

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

将上传数据倒回到开头。当 Cronet 需要上传数据提供程序处于与尚未调用 read 时等效的状态时调用。

为了表明操作已完成,此函数的实现必须调用 onRewindSucceeded 以表明成功,或调用 onRewindError 以表明失败。即使关联的 UrlRequest 被取消,也必须先调用其中一个方法,然后才能安全地释放资源。从该方法抛出异常等同于调用 onRewindError。如果不支持倒回(例如,从一次性流中读取),则应立即调用 onRewindError

实现者可以安全地假定,在他们通知接收器倒回已完成之前(如上一段所述),既不会发出 read,也不会发出并发 rewind 调用。

如果需要多次上传正文,Cronet 会在内部使用此方法。这可能会在许多不同的情况下发生,例如在跟踪重定向时,或在超时或网络断开后重试请求时。请注意,虽然实现倒回通常是可选的,但最终需要倒回的请求将失败,除非实现了倒回。

参数
uploadDataSink: UploadDataSink!

用于在倒回操作完成时(无论成功与否)通知的对象。

抛出
java.io.IOException

如果在该过程中发生任何 IOException。系统将调用 onFailed,并将抛出的异常设置为 CallbackException 的原因。