diff --git a/build.gradle b/build.gradle index 0c2c7b6..8ba6bd6 100644 --- a/build.gradle +++ b/build.gradle @@ -45,8 +45,8 @@ dependencies { implementation group: 'com.dslplatform', name: 'dsl-json', version: "${dslJsonVersion}" annotationProcessor group: 'com.dslplatform', name: 'dsl-json', version: "${dslJsonVersion}" // FastJson - implementation group: 'com.alibaba.fastjson2', name: 'fastjson2', version: '2.0.48' - implementation group: 'com.alibaba.fastjson2', name: 'fastjson2-incubator-vector', version: '2.0.48' + implementation group: 'com.alibaba.fastjson2', name: 'fastjson2', version: '2.0.51' + implementation group: 'com.alibaba.fastjson2', name: 'fastjson2-incubator-vector', version: '2.0.51' // FlexJson implementation group: 'net.sf.flexjson', name: 'flexjson', version: '3.3' // GENSON diff --git a/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java b/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java index f17e137..2abd3cf 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java +++ b/src/main/java/com/github/fabienrenaud/jjb/JsonBench.java @@ -51,6 +51,10 @@ public Object fastjson() throws Exception { return null; } + public Object fastjson_features() throws Exception { + return null; + } + public Object jsonio() throws Exception { return null; } diff --git a/src/main/java/com/github/fabienrenaud/jjb/data/JsonSource.java b/src/main/java/com/github/fabienrenaud/jjb/data/JsonSource.java index ec7dbd3..8d542c1 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/data/JsonSource.java +++ b/src/main/java/com/github/fabienrenaud/jjb/data/JsonSource.java @@ -1,5 +1,10 @@ package com.github.fabienrenaud.jjb.data; +import com.alibaba.fastjson2.JSONFactory; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.reader.ObjectReaderProvider; +import com.alibaba.fastjson2.writer.ObjectWriterProvider; import com.github.fabienrenaud.jjb.RandomUtils; import com.github.fabienrenaud.jjb.data.gen.DataGenerator; import com.github.fabienrenaud.jjb.provider.JsonProvider; @@ -29,6 +34,8 @@ public abstract class JsonSource { private final StreamSerializer streamSerializer; private final StreamDeserializer streamDeserializer; + private final FastjsonProvider fastjsonFeatures; + JsonSource(int quantity, int individualSize, JsonProvider provider, DataGenerator dataGenerator, StreamSerializer streamSerializer, StreamDeserializer streamDeserializer) { this.provider = provider; @@ -49,6 +56,24 @@ public abstract class JsonSource { } return arr; }); + + ObjectWriterProvider featuresWriterProvider = new ObjectWriterProvider(); + featuresWriterProvider.setDisableAutoType(true); + featuresWriterProvider.setDisableArrayMapping(true); + featuresWriterProvider.setDisableJSONB(true); + featuresWriterProvider.setDisableReferenceDetect(true); + JSONFactory.createWriteContext(featuresWriterProvider); + + ObjectReaderProvider featuresReaderProvider = new ObjectReaderProvider(); + featuresReaderProvider.setDisableArrayMapping(true); + featuresReaderProvider.setDisableAutoType(true); + featuresReaderProvider.setDisableJSONB(true); + featuresReaderProvider.setDisableReferenceDetect(true); + featuresReaderProvider.setDisableSmartMatch(true); + + fastjsonFeatures = new FastjsonProvider( + JSONFactory.createReadContext(featuresReaderProvider), + JSONFactory.createWriteContext(featuresWriterProvider)); } private void populateFields(int quantity, int individualSize) { @@ -124,4 +149,10 @@ public StreamDeserializer streamDeserializer() { private int index(int bound) { return bound == 1 ? 0 : RandomUtils.nextInt(bound); } + + public FastjsonProvider fastjsonFeatures() { + return fastjsonFeatures; + } + + public record FastjsonProvider (JSONReader.Context readerContext, JSONWriter.Context writerContext) {} } diff --git a/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java b/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java index 6e93923..72511e3 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java +++ b/src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java @@ -15,7 +15,6 @@ * @author Fabien Renaud */ public class Deserialization extends JsonBench { - public JsonSource JSON_SOURCE() { return CLI_JSON_SOURCE; } @@ -62,6 +61,12 @@ public Object fastjson() { return JSON.parseObject(JSON_SOURCE().nextByteArray(), JSON_SOURCE().pojoType()); } + @Benchmark + @Override + public Object fastjson_features() { + return JSON.parseObject(JSON_SOURCE().nextByteArray(), JSON_SOURCE().pojoType(), JSON_SOURCE().fastjsonFeatures().readerContext()); + } + @Benchmark @Override public Object flexjson() throws JsonSyntaxException { diff --git a/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java b/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java index 03ea550..b31296b 100644 --- a/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java +++ b/src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java @@ -13,7 +13,6 @@ import java.io.ByteArrayOutputStream; public class Serialization extends JsonBench { - public JsonSource JSON_SOURCE() { return CLI_JSON_SOURCE; } @@ -74,6 +73,14 @@ public Object fastjson() throws Exception { return baos; } + @Benchmark + @Override + public Object fastjson_features() throws Exception { + ByteArrayOutputStream baos = JsonUtils.byteArrayOutputStream(); + JSON.writeTo(baos, JSON_SOURCE().nextPojo(), JSON_SOURCE().fastjsonFeatures().writerContext()); + return baos; + } + @Benchmark @Override public Object flexjson() {