我想发送模型抛出Retrofit,其中包含一些标准字段和文件,并以BASE64格式编码。我知道,这是一种发送文件的疯狂方式,但是我有一台没有后端开发人员的服务器。
例如,当我发送3个pdf文件(每个20mb)时,我的内存用完了,像这样的异常
无法分配30544558字节的分配空间,其中2085152个空闲字节和26MB的空间直到OOM为止
我发现,解析base64字符串是一个问题,我已经在内存中供Json抛出GSON。根据{{3}},我曾尝试创建一个自定义适配器,但是在使用大型模型的情况下,这种想法会用光。将大字符串传递给JSON可以解决此问题?也许我可以使用其他适配器,而不是GSON?
Json中文档字段的模型和整个模型
data class Document(
var base64: MutableList<String?>,
var mime: String?,
var name: String?
)
data class OrderMainModel(
var INN: String?,
var KPP: String?,
var addressOfEstateObject: String?,
var addressOfGardenObject: String?,
var agentFathersName: String?,
var agentFirstName: String?,
var agentLastName: String?,
var approximateSizeOfEstateObject: Double?,
var approximateSizeOfOKS: Double?,
var area: String?,
var bankAccountNumber: Int?,
var companyAddress: String?,
var companyName: String?,
var documents: List<Document?>
}
改造方法
@Streaming
@POST("/api/order/")
fun makeOrder(@Header("Authorization") token: String, @Body order: OrderMainModel): Single<Response<PhoneNumberResponse>>
答案 0 :(得分:0)
也许,您应该将Flowable与适当的背压策略一起使用,而不要使用Single。 但是,如果您认为它适合您的适配器,则可以使用Jackson,因为它比Gson更快(根据this文章)。 而且,如果您想提高性能,则应该使用Protobuf而不是JSON。