reader = new JSONReader(new FileReader(metaJsonFile));
reader.startObject();
while (reader.hasNext()) {
String key = reader.readString();
String value = reader.readObject().toString();
if ("version".equals(key)) {
result = Integer.valueOf(value );
break; // <----------------------------------------------------------------------here;
}
Logger.e(TAG, "key = " + key + ", value = " + value);
}
reader.endObject(); <---------------------------- exception 发生在这里,, 内部状态错乱..
异常信息:
#getLocalVersonInfo
com.alibaba.fastjson.JSONException: syntax error, expect }, actual ,
at com.alibaba.fastjson.parser.DefaultJSONParser.accept(DefaultJSONParser.java:1455)
at com.alibaba.fastjson.JSONReader.endObject(JSONReader.java:76)
at com.gzb.sdk.emoji.GzbEmojiModule.getLocalVersonInfo(GzbEmojiModule.java:105)
at com.gzb.sdk.emoji.GzbEmojiModule.isNeedToUpdate(GzbEmojiModule.java:83)
at com.gzb.sdk.emoji.GzbEmojiModule.extractInternalEmojisFilesToSdCard(GzbEmojiModule.java:74)
at com.gzb.sdk.emoji.GzbEmojiModule.prepare(GzbEmojiModule.java:67)
at com.jiahe.gzb.ui.activity.MainActivity$1.run(MainActivity.java:232)
at java.lang.Thread.run(Thread.java:831)
我为什么要break呢?
因为读完 "version" 这个key 就已经满足我的使用场景, 不必继续往下read了...
直接return不可以么?
@wenshao
谢谢您的解答,
这是Bug吗,今天首次使用fastJson,遇到该问题,和楼主一样break出现的问题,
既然break处已满足需求,为什么还得继续耗cpu跑下去呢?
我之所以不return是因为跳出while循环后可能还有很多其他逻辑进行,总不能全放在 break 处再直接retrun 吧...
能给说明一下或提供下解决break问题的方案吗,万分感谢~
@wenshao
不过直接return的话,不用关闭reader吗 ?
@whendream @PendyWan
不过直接return的话,不用关闭reader吗 ?
你可以用如下, 另外我用gson了, 反正我是做客户端的, 也不差这么点效率.
boolean needToDoOtherThing = false;
try {
needToDoOtherThing = true;
return ; <-------------------------here
}
catch(){
}
finally {
reader.endObject(); // release stream res
if(needToDoOtherThing) {
//TODO : @PendyWan 做你想做的.
}
}