Skip to content

Commit 4f08ae0

Browse files
committed
add manual variants for jackson/json as well to see overhead of databind
1 parent 58dd923 commit 4f08ae0

File tree

3 files changed

+100
-0
lines changed

3 files changed

+100
-0
lines changed

src/main/java/com/cowtowncoder/jsonperf/dzone/MeasurementPOJO.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.cowtowncoder.jsonperf.dzone;
22

33
import com.dslplatform.json.CompiledJson;
4+
import com.fasterxml.jackson.core.JsonGenerator;
5+
import com.fasterxml.jackson.core.io.SerializedString;
46

7+
import java.io.IOException;
58
import java.util.List;
69

710
/**
@@ -11,6 +14,8 @@
1114
@CompiledJson
1215
public class MeasurementPOJO
1316
{
17+
private final static SerializedString PROP_ITEMS = new SerializedString("items");
18+
1419
public List<MeasurementRecord> items;
1520

1621
public MeasurementPOJO() { }
@@ -42,4 +47,16 @@ public String asJSON()
4247
}
4348
return sb.toString();
4449
}
50+
51+
public void writeTo(JsonGenerator gen) throws IOException
52+
{
53+
gen.writeStartObject();
54+
gen.writeFieldName(PROP_ITEMS);
55+
gen.writeStartArray();
56+
for (int i = 0, end = items.size(); i < end; ++i) {
57+
items.get(i).writeTo(gen);
58+
}
59+
gen.writeEndArray();
60+
gen.writeEndObject();
61+
}
4562
}

src/main/java/com/cowtowncoder/jsonperf/dzone/MeasurementRecord.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import java.util.*;
55

66
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.core.io.SerializedString;
79

810
/**
911
* Main test item. Contains both fields and getters/setters, given that different
@@ -13,6 +15,11 @@
1315
@JsonPropertyOrder({ "measurementId", "type", "duration", "time" })
1416
public class MeasurementRecord
1517
{
18+
private final static SerializedString PROP_MEASUREMENT_ID = new SerializedString("measurementId");
19+
private final static SerializedString PROP_TYPE = new SerializedString("type");
20+
private final static SerializedString PROP_DURATION = new SerializedString("duration");
21+
private final static SerializedString PROP_TIME = new SerializedString("time");
22+
1623
public String measurementId;
1724
public MeasurementType type;
1825

@@ -63,4 +70,18 @@ public void appendAsJSON(Appendable target) throws IOException
6370
measurementId, type.name(), duration, time
6471
));
6572
}
73+
74+
public void writeTo(JsonGenerator gen) throws IOException
75+
{
76+
gen.writeStartObject();
77+
gen.writeFieldName(PROP_MEASUREMENT_ID);
78+
gen.writeString(measurementId);
79+
gen.writeFieldName(PROP_TYPE);
80+
gen.writeString(type.name());
81+
gen.writeFieldName(PROP_DURATION);
82+
gen.writeNumber(duration);
83+
gen.writeFieldName(PROP_TIME);
84+
gen.writeNumber(time);
85+
gen.writeEndObject();
86+
}
6687
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package com.cowtowncoder.jsonperf.dzone.write;
2+
3+
import java.io.OutputStream;
4+
import java.io.Writer;
5+
import java.util.concurrent.TimeUnit;
6+
7+
import org.openjdk.jmh.annotations.OutputTimeUnit;
8+
import org.openjdk.jmh.annotations.Scope;
9+
import org.openjdk.jmh.annotations.State;
10+
11+
import com.cowtowncoder.jsonperf.dzone.DZoneWriteTestBase;
12+
import com.cowtowncoder.jsonperf.dzone.MeasurementPOJO;
13+
14+
import com.fasterxml.jackson.core.*;
15+
import com.fasterxml.jackson.core.io.SegmentedStringWriter;
16+
import com.fasterxml.jackson.core.util.BufferRecycler;
17+
18+
@State(Scope.Thread)
19+
@OutputTimeUnit(TimeUnit.SECONDS)
20+
public class DZoneManualWJackson extends DZoneWriteTestBase
21+
{
22+
private final JsonFactory _jsonFactory;
23+
private final SegmentedStringWriter _writer;
24+
25+
public DZoneManualWJackson()
26+
{
27+
_jsonFactory = new JsonFactory();
28+
_writer = new SegmentedStringWriter(new BufferRecycler());
29+
}
30+
31+
@Override
32+
public int _writeItems(MeasurementPOJO items, OutputStream out) throws Exception
33+
{
34+
int count = 0;
35+
try (JsonGenerator g = _jsonFactory.createGenerator(out)) {
36+
items.writeTo(g);
37+
count = items.size();
38+
}
39+
return count;
40+
}
41+
42+
@Override
43+
public int _writeItems(MeasurementPOJO items, Writer out) throws Exception
44+
{
45+
int count = 0;
46+
try (JsonGenerator g = _jsonFactory.createGenerator(out)) {
47+
items.writeTo(g);
48+
count = items.size();
49+
}
50+
return count;
51+
}
52+
53+
54+
@Override
55+
public String _writeAsString(MeasurementPOJO items) throws Exception
56+
{
57+
try (JsonGenerator g = _jsonFactory.createGenerator(_writer)) {
58+
items.writeTo(g);
59+
return _writer.getAndClear();
60+
}
61+
}
62+
}

0 commit comments

Comments
 (0)