我的输入是一个大约有一个数组。每秒接收2,000个元素,有时每秒接收几次。数组的每个元素都有3个大十进制。
Jackson(com.fasterxml)是其他毫秒级应用程序中最慢的部分,耗时15毫秒(avg)。慢速功能是objectMapper.readValue(text,MyDto.class);
使用基于子字符串的自定义JSON解析算法时,需要花费微秒。使用ObjectMapper可以达到15毫秒。
通过子字符串解析JSON是一种不好的做法,因为代码冗长且容易出现错误。
您将使用什么进行JSON解析?要求是一种非常快速的算法。
https://github.com/ngs-doo/dsl-json我找到了DSL json,但不知道使它能够将带有JSON的String解析到我的DTO中很热。我还没有找到一种简单的快速算法来将JSON从String解析为DTO。
编辑:要解析的输入在:
https://pastebin.com/831YtBdq
代码:
public class BitstampOrderBook {
private long timestamp;
private List<List<BigDecimal>> bids;
private List<List<BigDecimal>> asks;
public BitstampOrderBook() {
}
public BitstampOrderBook(long timestamp, List<List<BigDecimal>> bids, List<List<BigDecimal>> asks) {
this.timestamp = timestamp;
this.bids = bids;
this.asks = asks;
}
public long getTimestamp() {
return timestamp;
}
public List<List<BigDecimal>> getBids() {
return bids;
}
public List<List<BigDecimal>> getAsks() {
return asks;
}
}
public class BitstampOrder {
private BigDecimal price;
private BigDecimal amount;
private String datetime;
private int id;
@SerializedName("order_type")
private int orderType;
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public String getDatetime() {
return datetime;
}
public void setDatetime(String datetime) {
this.datetime = datetime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrderType() {
return orderType;
}
public void setOrderType(int orderType) {
this.orderType = orderType;
}
@Override
public String toString() {
return "BitStampOrder{" +
"price=" + price +
", amount=" + amount +
", datetime='" + datetime + '\'' +
", id='" + id + '\'' +
", orderType='" + orderType + '\'' +
'}';
}
}
主要:
BitstampOrderBook orderBook = objectMapper.readValue(jsonString, BitstampOrderBook.class);
JProfiler(杰克逊):
https://i.imgur.com/mjdbDQe.png
编辑2:
JProfiler(Gson):
https://i.imgur.com/WcHVhhd.png
从JProfiler可以看出,Gson比Jackson快几倍。会比Gson还要快?