如何为GSON编写类型适配器来发送流?

时间:2013-08-16 05:57:52

标签: json adapter gson

我班级的一个字段是文件名。 对于序列化,我将编写应发送文件流的Gson类型适配器(实现JsonSerializer<MyClass>)。

问题是我不希望它读取所有文件数据(流)并将其保存为内存中的字符串,因为内存大小有限(它的移动设备),我必须发送一些其他字段({{ 1}} fe fe),所以json应该是这样的:

filename

在这种情况下,将网络中的文件数据作为字段发送的最佳方法是什么?

PS。网络发送由Apache Http Client完成,如果它有帮助

1 个答案:

答案 0 :(得分:1)

在一个请求体中混合使用json和大型二进制数据似乎不是一个好的架构解决方案。可以使用http Multipart代替:

    HttpPost request = new HttpPost(url);

    MultipartEntity multipartEntity = new MultipartEntity();
    request.setEntity(multipartEntity);

    // body
    try {
        multipartEntity.addPart("json", new StringBody(body, "application/json", Charset.forName("utf-8")));
    } catch (UnsupportedEncodingException e) {
        throw new ResourceLoadingException(e);
    }

    // files
    for (int i=0; i<filespaths.size(); i++) {
        String eachFilePath = filespaths.get(i);
        File file = new File(eachFilePath);
        multipartEntity.addPart("file" + String.valueOf(i), new FileBody(file));
    }

移动设备怎么样Android不支持Multipart机构,但您可以轻松添加对它的支持(如果使用Maven或Gradle):

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpmime</artifactId>
    <version>4.2.5</version>
</dependency>