diff --git a/pom.xml b/pom.xml index df30ad6..28cbd51 100644 --- a/pom.xml +++ b/pom.xml @@ -146,16 +146,22 @@ com.dslplatform dsl-json - 0.9.5 + 1.0.0 com.dslplatform dsl-json-processor - 0.4 + 1.0 provided + + commons-io + commons-io + 2.5 + + diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapBoon.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapBoon.java index 7290b48..2ac2605 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapBoon.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapBoon.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -26,6 +27,11 @@ public Map _readItems(byte[] input) throws Exception { return mapper.readValue(input, Map.class); } + @Override + public Map _readItems(InputStream input) throws Exception { + return mapper.readValue(input, Map.class); + } + @Override public Map _readItems(String input) throws Exception { return mapper.readValue(input, Map.class); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapDslJson.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapDslJson.java new file mode 100755 index 0000000..e85dbaf --- /dev/null +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapDslJson.java @@ -0,0 +1,40 @@ +package com.cowtowncoder.jsonperf.dzone.read; + +import com.dslplatform.json.DslJson; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; + +import java.io.InputStream; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +@State(Scope.Thread) +@OutputTimeUnit(TimeUnit.SECONDS) +public class DZoneReadMapDslJson extends DZoneReadTestBase> +{ + private final DslJson dsl; + private final byte[] buffer = new byte[8192]; + + public DZoneReadMapDslJson() + { + dsl = new DslJson<>(); + } + + @SuppressWarnings("unchecked") + @Override + public Map _readItems(byte[] input) throws Exception { + return dsl.deserialize(Map.class, input, input.length); + } + + @SuppressWarnings("unchecked") + @Override + public Map _readItems(InputStream input) throws Exception { + return dsl.deserialize(Map.class, input, buffer); + } + + @Override + public Map _readItems(String input) throws Exception { + return _readItems(input.getBytes("UTF-8")); + } +} diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapFastjson.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapFastjson.java index c00162f..a80661b 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapFastjson.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapFastjson.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -25,6 +26,12 @@ public Map _readItems(byte[] input) throws Exception { return (Map) JSON.parse(input, Feature.DisableCircularReferenceDetect); } + @SuppressWarnings("unchecked") + @Override + public Map _readItems(InputStream input) throws Exception { + return (Map) JSON.parseObject(input, Map.class, Feature.DisableCircularReferenceDetect); + } + @SuppressWarnings("unchecked") @Override public Map _readItems(String input) throws Exception { diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapGSON.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapGSON.java index ca86080..ab50632 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapGSON.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapGSON.java @@ -24,7 +24,12 @@ public DZoneReadMapGSON() @Override public Map _readItems(byte[] input) throws Exception { - InputStreamReader r = new InputStreamReader(new ByteArrayInputStream(input), "UTF-8"); + return _readItems(new ByteArrayInputStream(input)); + } + + @Override + public Map _readItems(InputStream input) throws Exception { + InputStreamReader r = new InputStreamReader(input, "UTF-8"); Map value = gson.fromJson(r, Map.class); r.close(); return value; diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJackson.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJackson.java index 2b641e7..1847c9e 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJackson.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJackson.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -26,6 +27,11 @@ public Map _readItems(byte[] input) throws Exception { return objectReader.readValue(input); } + @Override + public Map _readItems(InputStream input) throws Exception { + return objectReader.readValue(input); + } + @Override public Map _readItems(String input) throws Exception { return objectReader.readValue(input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJacksonJr.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJacksonJr.java index d00f68e..333f811 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJacksonJr.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJacksonJr.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -25,6 +26,11 @@ public Map _readItems(byte[] input) throws Exception { return json.mapFrom(input); } + @Override + public Map _readItems(InputStream input) throws Exception { + return json.mapFrom(input); + } + @Override public Map _readItems(String input) throws Exception { return json.mapFrom(input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJohnzon.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJohnzon.java index 78d40e4..c15814f 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJohnzon.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJohnzon.java @@ -1,6 +1,7 @@ package com.cowtowncoder.jsonperf.dzone.read; import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -23,8 +24,13 @@ public DZoneReadMapJohnzon() @Override public Map _readItems(byte[] input) throws Exception { + return _readItems(new ByteArrayInputStream(input)); + } + + @Override + public Map _readItems(InputStream input) throws Exception { // force assign to ensure casting checks the type - Map value = mapper.readObject(new ByteArrayInputStream(input), Object.class); + Map value = mapper.readObject(input, Object.class); return value; } diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonIO.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonIO.java index ab60986..0a8b696 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonIO.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonIO.java @@ -18,7 +18,12 @@ public DZoneReadMapJsonIO() { } @Override public Map _readItems(byte[] input) throws Exception { - JsonReader r = new JsonReader(new ByteArrayInputStream(input)); + return _readItems(new ByteArrayInputStream(input)); + } + + @Override + public Map _readItems(InputStream input) throws Exception { + JsonReader r = new JsonReader(input); Map value = (Map) r.readObject(); r.close(); return value; diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonMoshi.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonMoshi.java index df3538e..011bfb4 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonMoshi.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonMoshi.java @@ -1,8 +1,10 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.apache.commons.io.IOUtils; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; @@ -30,6 +32,11 @@ public Map _readItems(byte[] input) throws Exception { return adapter.fromJson(new String(input, "UTF-8")); } + @Override + public Map _readItems(InputStream input) throws Exception { + return adapter.fromJson(IOUtils.toString(input, "UTF-8")); + } + @Override public Map _readItems(String input) throws Exception { return adapter.fromJson(input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonParse.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonParse.java index 7da8a33..3f6ecfe 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonParse.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadMapJsonParse.java @@ -1,8 +1,10 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.apache.commons.io.IOUtils; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; @@ -27,6 +29,11 @@ public Map _readItems(byte[] input) throws Exception { return _readItems(new String(input, "UTF-8")); } + @Override + public Map _readItems(InputStream input) throws Exception { + return _readItems(IOUtils.toString(input, "UTF-8")); + } + @Override public Map _readItems(String input) throws Exception { return parse.map(input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoBoon.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoBoon.java index cd0bdfe..95a9c02 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoBoon.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoBoon.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.OutputTimeUnit; @@ -27,6 +28,11 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return mapper.readValue(input, MeasurementPOJO.class); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + return mapper.readValue(input, MeasurementPOJO.class); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return mapper.readValue(input, MeasurementPOJO.class); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoDslJson.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoDslJson.java index f3fb155..33dc0b4 100755 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoDslJson.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoDslJson.java @@ -6,6 +6,7 @@ import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; +import java.io.InputStream; import java.util.concurrent.TimeUnit; @State(Scope.Thread) @@ -13,6 +14,7 @@ public class DZoneReadPojoDslJson extends DZoneReadTestBase { private final DslJson dsl; + private final byte[] buffer = new byte[8192]; public DZoneReadPojoDslJson() { @@ -24,6 +26,11 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return dsl.deserialize(MeasurementPOJO.class, input, input.length); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + return dsl.deserialize(MeasurementPOJO.class, input, buffer); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return _readItems(input.getBytes("UTF-8")); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoFastjson.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoFastjson.java index 470b9ae..1daf05a 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoFastjson.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoFastjson.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.OutputTimeUnit; @@ -24,6 +25,11 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return JSON.parseObject(input, MeasurementPOJO.class, Feature.DisableCircularReferenceDetect); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + return JSON.parseObject(input, MeasurementPOJO.class, Feature.DisableCircularReferenceDetect); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return JSON.parseObject(input, MeasurementPOJO.class, Feature.DisableCircularReferenceDetect); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoGSON.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoGSON.java index 2317f53..dc3a149 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoGSON.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoGSON.java @@ -24,7 +24,12 @@ public DZoneReadPojoGSON() @Override public MeasurementPOJO _readItems(byte[] input) throws Exception { - InputStreamReader r = new InputStreamReader(new ByteArrayInputStream(input), "UTF-8"); + return _readItems(new ByteArrayInputStream(input)); + } + + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + InputStreamReader r = new InputStreamReader(input, "UTF-8"); MeasurementPOJO value = gson.fromJson(r, MeasurementPOJO.class); r.close(); return value; diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJackson.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJackson.java index 64595fa..5037eb9 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJackson.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJackson.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.OutputTimeUnit; @@ -26,6 +27,11 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return objectReader.readValue(input); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + return objectReader.readValue(input); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return objectReader.readValue(input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonAB.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonAB.java index 161a2cf..db8cd0e 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonAB.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonAB.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.OutputTimeUnit; @@ -29,6 +30,11 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return objectReader.readValue(input); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + return objectReader.readValue(input); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return objectReader.readValue(input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonJr.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonJr.java index a43021e..885eb2e 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonJr.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJacksonJr.java @@ -1,5 +1,6 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.OutputTimeUnit; @@ -25,6 +26,11 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return json.beanFrom(MeasurementPOJO.class, input); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + return json.beanFrom(MeasurementPOJO.class, input); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return json.beanFrom(MeasurementPOJO.class, input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJohnzon.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJohnzon.java index ab8f70d..58e6407 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJohnzon.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoJohnzon.java @@ -1,6 +1,7 @@ package com.cowtowncoder.jsonperf.dzone.read; import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.util.concurrent.TimeUnit; import org.apache.johnzon.mapper.Mapper; @@ -27,6 +28,11 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return mapper.readObject(new ByteArrayInputStream(input), MeasurementPOJO.class); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + return mapper.readObject(input, MeasurementPOJO.class); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return mapper.readObject(input, MeasurementPOJO.class); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoMoshi.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoMoshi.java index 5a0e9ce..610d5ba 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoMoshi.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadPojoMoshi.java @@ -1,7 +1,9 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.InputStream; import java.util.concurrent.TimeUnit; +import org.apache.commons.io.IOUtils; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; @@ -29,6 +31,13 @@ public MeasurementPOJO _readItems(byte[] input) throws Exception { return adapter.fromJson(new String(input, "UTF-8")); } + @Override + public MeasurementPOJO _readItems(InputStream input) throws Exception { + // In theory there may be a way to use Writer etc; but it gets complicated + // enough with the strange API that... yeah. + return adapter.fromJson(IOUtils.toString(input, "UTF-8")); + } + @Override public MeasurementPOJO _readItems(String input) throws Exception { return adapter.fromJson(input); diff --git a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadTestBase.java b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadTestBase.java index 813d018..67b89b0 100644 --- a/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadTestBase.java +++ b/src/main/java/com/cowtowncoder/jsonperf/dzone/read/DZoneReadTestBase.java @@ -1,5 +1,7 @@ package com.cowtowncoder.jsonperf.dzone.read; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.util.concurrent.TimeUnit; import org.openjdk.jmh.annotations.Benchmark; @@ -14,6 +16,10 @@ abstract class DZoneReadTestBase protected final static byte[] list1000b = TestData.Input.list1000Bytes; protected final static byte[] list100000b = TestData.Input.list100000Bytes; + protected final static InputStream list10i = new ByteArrayInputStream(TestData.Input.list10Bytes); + protected final static InputStream list1000i = new ByteArrayInputStream(TestData.Input.list1000Bytes); + protected final static InputStream list100000i = new ByteArrayInputStream(TestData.Input.list100000Bytes); + protected final static String list10s = TestData.Input.list10String; protected final static String list1000s = TestData.Input.list1000String; protected final static String list100000s = TestData.Input.list100000String; @@ -21,6 +27,7 @@ abstract class DZoneReadTestBase // // // Abstract methods for sub-classes public abstract T _readItems(byte[] input) throws Exception; + public abstract T _readItems(InputStream input) throws Exception; public abstract T _readItems(String input) throws Exception; // // // Using OutputStream @@ -43,6 +50,27 @@ public void read100kFromBytes(Blackhole bh) throws Exception { bh.consume(_readItems(list100000b)); } + @Benchmark + @OutputTimeUnit(TimeUnit.SECONDS) + public void read10FromStream(Blackhole bh) throws Exception { + list10i.reset(); + bh.consume(_readItems(list10i)); + } + + @Benchmark + @OutputTimeUnit(TimeUnit.SECONDS) + public void read1kFromStream(Blackhole bh) throws Exception { + list1000i.reset(); + bh.consume(_readItems(list1000i)); + } + + @Benchmark + @OutputTimeUnit(TimeUnit.SECONDS) + public void read100kFromStream(Blackhole bh) throws Exception { + list100000i.reset(); + bh.consume(_readItems(list100000i)); + } + // // // Using readr @Benchmark