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

Hug*_*sse 16 android json android-parser logan-square

我正在使用Jackson和DataBind库来解析json并将其映射到java对象.我也在其他项目中使用Gson,其中perf较少.

2月17日,LoganSquare库首次发布,有望像Gson一样快4到10倍的解析时间.

  • LoganSquare比Gson/Jackson没有什么优势?
  • 优点和缺点?
  • 你有生产应用程序的基准吗?
  • 对于生产应用程序来说是否足够稳定?

我知道它可能是一个主要的意见基础问题,所以尽可能技术和具体,并根据实际数据做出答案.

Erc*_*can 19

很明显,如果您将应用程序发布到具有ART的设备,您将通过解析获得巨大的速度优势.

所以我将解释我迄今为止使用logansquare的经验.

专业人士

  • 易于使用:使用Gson你必须使用Type将json数组解析为一个对象列表,在loganSquare中它很容易LoganSquare.parseList()
  • 更快:在任何设备中(自己测试)它会稍快一些.
  • 更快:在ART设备中,它的速度差距真的很大,看他们的基准
  • RetroFit友好:是的,它与改造相得益彰.

缺点:

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

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

看到自己的标杆这里

这是我糟糕的基准测试结果(它不是一个合适的基准,但它是一些东西):模拟器nexus 5,与DalvikVM,4.2软糖

基准

解析时间表

解析时间图

解析模型

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;
    }
}
Run Code Online (Sandbox Code Playgroud)