fastjson JSONWriter应该加一个重置状态的方法

yuvru6vn  于 2021-11-27  发布在  Java
关注(0)|答案(1)|浏览(257)

为提升性能,我的JSONWriter对象是重复使用用的.初始代码大至是这样
this.mTextStrBuilder = new StringBuilder();
this.mTextWriter = new TextWriter(this.mTextStrBuilder);
this.mWriter = new JSONWriter(this.mTextWriter);
这几个对象一直存在.每次处理json完成后,我确保清空了StringBuilder,但是当发生异常时,不会调用endArray或endObject.这时再次使用 this.mWriter.startObject();时,
public void startObject() {
if (this.context != null) {
this.beginStructure();
}

this.context = new JSONStreamContext(this.context, 1001);
    this.writer.write(123);
}

this.context非null执行了 this.beginStructure();在beginStructure中int state = this.context.state;是非正常状态,可能会执行以下代码
case 1002:
this.writer.write(58);
break;
case 1003:
default:
throw new JSONException("illegal state : " + state);
case 1005:
this.writer.write(44);
因此在新输出的json字符串开始位置时多个了,生成的内容如下:

,{"name":"xxx"}

希望增加一个方法手动在对象重复使用时手动重置状态.

zzlelutf

zzlelutf1#

我已解决了问题,修改了JSONWriter.java源码,增加了一个reset方法
public void reset() {
this.writer.flush();
this.context = null;
}
在每次生成json时不论是否发生异常,只要在重新使用之前只要执行下面三行代码即可
this.mWriter.reset();
this.mTextWriter.flush();
this.mTextStrBuilder.clear();//这是自己写的一个StringBuilder类

相关问题