4
在執行將Java對象轉換爲JSON的確切任務之前,我已經測試了以下示例。將Java對象轉換爲JSON對象時的性能問題
Converting Java objects to JSON with Jackson
而且我一直在尋找更好的性能(轉換時間應該是非常少的)。
This article顯示來自this answer的不同API之間的性能統計數據。
我的發現是,例如與我提到的第一個鏈接(與幾個記錄):
ValueData object = new ValueData();
List<ValueItems> information = new ArrayList<ValueItems>();
ValueItems v1 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat1", 1, "data1");
ValueItems v2 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat2", 2, "data2");
ValueItems v3 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat3", 3, "data3");
ValueItems v4 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat4", 4, "data4");
ValueItems v5 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat5", 5, "data5");
ValueItems v6 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat6", 6, "data6");
ValueItems v7 = new ValueItems(String.valueOf(Calendar.getInstance().getTimeInMillis()), "feat7", 7, "data7");
information.add(v1);
information.add(v2);
information.add(v3);
information.add(v4);
information.add(v5);
information.add(v6);
information.add(v7);
object.setInformation(information);
而且我會用傑克遜這個object
轉換:
long smili = Calendar.getInstance().getTimeInMillis();
ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(object);
long emili = Calendar.getInstance().getTimeInMillis();
System.out.println("taken time using jackson = " + (emili - smili) + " milli seconds");
而且我現在做用StringBuilder
:
smili = Calendar.getInstance().getTimeInMillis();
StringBuilder sb = new StringBuilder();
sb.append("{\n\"information\" : [\n");
for (ValueItems vi : object.getInformation()) {
sb.append("{\n\"timestamp\" : \""+vi.getTimestamp()+"\",");
sb.append("\"feature\" : \""+vi.getFeature()+"\",");
sb.append("\"ean\" : "+vi.getEan()+",");
sb.append("\"data\" : \""+vi.getData()+"\"\n},");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]\n}");
emili = Calendar.getInstance().getTimeInMillis();
System.out.println("taken time using StringBuilder = " + (emili - smili) + " milli seconds");
我下面給出的時間只是清單size
7:
taken time using jackson = 534 milli seconds
taken time using StringBuilder = 1 milli seconds
我想將對象轉換與information list
規模超過10K,但時間應該是非常少的。
- 使用
StringBuilder
創建JSON購買將有助於在這種情況下? - 有沒有其他的API給我需要的設施?
請幫我解決這個問題。
好Q,有人更知道那麼我會回答性能,但看看你的StringBuilder代碼和使用Jackson的代碼之間的區別。如果你開始嵌套除字符串之外的對象,Jackson的實現更易於維護,並且StringBuilder代碼會變得瘋狂。傑克遜允許您儘可能地將代碼/序列化問題與您的代碼分開。 –
查看[Afterburner](https://github.com/FasterXML/jackson-module-afterburner)以提高性能。 –
謝謝@SamB。 'AfterBurner'比'StringBuilder'高效。但是我仍然在尋找更好的一個,因爲這對大數據很有效,但對於小尺寸我發現'StringBuilder'更好(如果我們不考慮序列化或反序列化) –