如何使用 OkHttp 的模拟网络服务器发送流响应?



将文件内容从服务器返回到客户端时的典型流程是:

1.(获取文件的输入流2.(将流的块写入打开的套接字3.(关闭输入流

当使用OkHttp的mockwebserver时,MockResponse只接受一个Okio缓冲区。这意味着我们必须在发送之前将整个输入流内容读取到缓冲区中。如果文件太大,这可能会导致OutOfMemory异常。有没有一种方法可以在不使用双工响应的情况下完成我上面概述的逻辑流,或者我应该使用另一个库?以下是我目前在kotlin中发送文件的方式:

val inputStream = FileInputStream(file)
val source = inputStream.source()
val buf = Buffer()
buf.writeAll(source.buffer())
source.close()
val response = HTTP_200
response.setHeader("Content-Type", "video/mp4")
response.setBody(buf)
return response
// Dispatch the response, etc...

这是MockWebServer的设计限制,保证在服务端没有IOExceptions。如果您的响应大于内存容量,那么MockWebServer是错误的工具。

最新更新