@@ -154,9 +154,9 @@ JsonIterator.setMode(DecodingMode.REFLECTION_MODE);
154
154
155
155
如果你想要最好的性能,但是你使用的平台又无法支持动态代码生成的时候,你可以选择静态代码生成。要启用静态代码生成,需要完成三件事情:
156
156
157
- * 提前定义哪些 class 是需要编解码的
158
- * 把代码生成加入到 build 的过程中,比如 maven
159
- * 把模式切换为 static
157
+ * 通过 CodegenConfig 提前定义哪些 class 是需要编解码的
158
+ * 把代码生成加入到 build 的过程中,比如 maven/gradle
159
+ * 在使用前,调用 CodegenConfig 的 setup 方法
160
160
161
161
首先我们来定义哪些class是需要编解码的
162
162
@@ -167,6 +167,7 @@ public class DemoCodegenConfig implements CodegenConfig {
167
167
public void setup () {
168
168
// register custom decoder or extensions before codegen
169
169
// so that we doing codegen, we know in which case, we need to callback
170
+ JsonIterator . setMode(DecodingMode . STATIC_MODE ); // must set to static mode
170
171
JsoniterSpi . registerFieldDecoder(User . class, " score" , new Decoder .IntDecoder () {
171
172
@Override
172
173
public int decodeInt (JsonIterator iter ) throws IOException {
@@ -223,15 +224,11 @@ public class DemoCodegenConfig implements CodegenConfig {
223
224
224
225
产生的java代码会被写到你项目的 ` src/main/java ` 目录,作为你的代码的一部分。输出目录是通过workingDirectory来指定的。如果你不想改workingDirectory,也可以传递第二个参数给StaticCodeGenerator。
225
226
226
- 最后把模式切换一下
227
+ 把模式设置为 static 之后,动态代码生成就不会被自动触发了。如果对应的类没有预先生成的编解码代码,异常会被抛出。
227
228
228
- ``` java
229
- JsonStream . setMode(EncodingMode . STATIC_MODE );
230
- JsonIterator . setMode(DecodingMode . STATIC_MODE ); // set mode before using
231
- JsonIterator . deserialize(...
232
- ```
229
+ 普通的 Java 项目,参见: https://github.com/json-iterator/java/tree/master/demo
233
230
234
- 把模式设置为 static 之后,动态代码生成就不会被自动触发了。如果对应的类没有预先生成的编解码代码,异常会被抛出。
231
+ Android 项目,参见: https://github.com/json-iterator/java/tree/master/android-demo
235
232
236
233
# 对象绑定的多种姿势
237
234
0 commit comments