Skip to content

Commit c6bea75

Browse files
committed
split reflection decoder
1 parent 1d7597e commit c6bea75

6 files changed

Lines changed: 198 additions & 159 deletions

File tree

demo/src/test/java/com/jsoniter/demo/ModelTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.fasterxml.jackson.core.type.TypeReference;
55
import com.fasterxml.jackson.databind.ObjectMapper;
66
import com.fasterxml.jackson.module.afterburner.AfterburnerModule;
7+
import com.jsoniter.DecodingMode;
78
import com.jsoniter.JsonIterator;
89
import com.jsoniter.spi.TypeLiteral;
910
import org.junit.Test;
@@ -35,6 +36,7 @@ public void benchSetup(BenchmarkParams params) {
3536
iter = new JsonIterator();
3637
modelTypeLiteral = new TypeLiteral<Model>() {
3738
};
39+
JsonIterator.setMode(DecodingMode.DYNAMIC_MODE_AND_MATCH_FIELD_WITH_HASH);
3840
jackson = new ObjectMapper();
3941
jackson.registerModule(new AfterburnerModule());
4042
modelTypeReference = new TypeReference<Model>() {
@@ -44,8 +46,7 @@ public void benchSetup(BenchmarkParams params) {
4446
@Test
4547
public void test() throws IOException {
4648
benchSetup(null);
47-
iter.reset(inputBytes);
48-
System.out.println(iter.read(modelTypeLiteral).name);
49+
System.out.println(iter.read(inputBytes, modelTypeLiteral).name);
4950
System.out.println(JSON.parseObject(input, Model.class).name);
5051

5152
}
@@ -74,7 +75,7 @@ public void fastjson(Blackhole bh) throws IOException {
7475

7576
@Benchmark
7677
public void jackson(Blackhole bh) throws IOException {
77-
bh.consume(jackson.readValue(input, modelTypeReference));
78+
bh.consume(jackson.readValue(inputBytes, modelTypeReference));
7879
}
7980

8081
public static class Model {

src/main/java/com/jsoniter/Codegen.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,9 @@ private synchronized static Decoder gen(String cacheKey, Type type) {
6464
clazz = (Class) type;
6565
}
6666
if (mode == DecodingMode.REFLECTION_MODE) {
67-
return ReflectionDecoderFactory.create(clazz, typeArgs);
67+
decoder = ReflectionDecoderFactory.create(clazz, typeArgs);
68+
JsoniterSpi.addNewDecoder(cacheKey, decoder);
69+
return decoder;
6870
}
6971
try {
7072
decoder = (Decoder) Class.forName(cacheKey).newInstance();

src/main/java/com/jsoniter/ReflectionDecoderFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ public Object decode(JsonIterator iter) throws IOException {
2929
if (Map.class.isAssignableFrom(clazz)) {
3030
return new ReflectionMapDecoder(clazz, typeArgs);
3131
}
32-
return new ReflectionObjectDecoder(clazz);
32+
return new ReflectionObjectDecoder(clazz).create();
3333
}
3434
}

0 commit comments

Comments
 (0)