LoganSquare 解析 Android 库:反馈、基准、优点、缺点

LoganSquare parsing Android library : feedback, benchmarks, pros, cons

我正在使用 Jackson 和 DataBind 库来解析 json 并将其映射到 java 对象。我还在其他不太需要 perf 的项目上使用 Gson。

2 月 17 日,LoganSquare 库首次发布,承诺解析速度比 Gson 快 4-10 倍。

我知道这可能是一个主要基于意见的问题,所以尽可能技术性和具体性,并根据真实数据回答。

需要明确的是,如果您将应用发布到具有 ART 的设备,您将通过解析获得巨大的速度优势。

所以我将解释到目前为止我使用 logansquare 的经历。

优点:

  • 易于使用:对于 Gson,您必须使用 Type 来将 json 数组解析为对象列表,在 loganSquare 中它非常简单 LoganSquare.parseList()
  • 更快 : 在任何设备中(自己测试)它都稍微快一些。
  • FasterER:在 ART 设备中,它的速度差距确实很大,请参阅他们的基准测试
  • RetroFit 友好:是的,它很适合改装。

缺点:

  • NO REALM DB : 到目前为止,我无法使用 Realm db 运行(我还没有努力尝试)

  • 自定义类型适配器:到目前为止找不到类型适配器或类似的东西,但我不确定。

查看他们的基准 here

这是我糟糕的基准测试结果(这不是一个合适的基准测试,但确实不错): 模拟器 nexus 5,带有 DalvikVM,4.2 jellybean

基准

解析模型

import com.bluelinelabs.logansquare.annotation.JsonField;
import com.bluelinelabs.logansquare.annotation.JsonObject;
import com.google.gson.annotations.SerializedName;

/**
 * Created by Ercan on 6/26/2015.
 */
@JsonObject(serializeNullCollectionElements = true ,serializeNullObjects = true)
public class Village {

    @SerializedName("IdVillage")
    @JsonField(name ="IdVillage")
    String tbsVillageId;

    @SerializedName("TBS_VillageId")
    @JsonField(name ="TBS_VillageId")
    String townRefId;

    @SerializedName("VillageName")
    @JsonField(name ="VillageName")
    String villageName;

    @SerializedName("Status")
    @JsonField(name ="Status")
    String status;

    @SerializedName("DateInserted")
    @JsonField(name ="DateInserted")
    String dateInserted;

    @SerializedName("DateLastModified")
    @JsonField(name ="DateLastModified")
    String datelastModified;

    public String getTbsVillageId() {
        return tbsVillageId;
    }

    public void setTbsVillageId(String tbsVillageId) {
        this.tbsVillageId = tbsVillageId;
    }

    public String getTownRefId() {
        return townRefId;
    }

    public void setTownRefId(String townRefId) {
        this.townRefId = townRefId;
    }

    public String getVillageName() {
        return villageName;
    }

    public void setVillageName(String villageName) {
        this.villageName = villageName;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getDateInserted() {
        return dateInserted;
    }

    public void setDateInserted(String dateInserted) {
        this.dateInserted = dateInserted;
    }

    public String getDatelastModified() {
        return datelastModified;
    }

    public void setDatelastModified(String datelastModified) {
        this.datelastModified = datelastModified;
    }
}

我的 Nexus 5 设备上有 运行 LoganSquare Benchmark 项目 Android 6.0.1,结果如下:

此外,在使用 lib 一段时间后,我的优缺点如下:

优点

  1. 解析和序列化都非常快
  2. 图书馆规模较小
  3. 列表解析和序列化的简便方法
  4. 有用的转换器
  5. 编译时错误,而不是 运行-time only

缺点

  1. 文档不多,问题和答案也不多 计算器溢出:)
  2. 支持的类型不多
  3. 地图集合中仅支持字符串键

我写了一个 example project to see how LoganSquare works and also a blog post,所以请看那里了解更多信息。

response.body() 是字符串 json 响应

// MovieData是一个模型Class

 MovieData movieData=LoganSquare.parse(response.body(),MovieData.class);

 Log.d("onResponse: ",movieData.getTitle());

图书馆已经 4 年多没有更新了。

到目前为止,它基本上工作正常,但据我所知它将在 gradle 5.

后停止工作