From 37ad396fe80d32f5efed545583bc2665e0af35f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Wed, 27 Apr 2016 09:21:53 +0800 Subject: [PATCH] optimized code, less access field, use local variable --- .../fastjson/parser/DefaultJSONParser.java | 45 ++++++++++++++----- .../alibaba/fastjson/parser/SymbolTable.java | 4 +- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java index 4ca69169f..91a878984 100755 --- a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java +++ b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java @@ -445,7 +445,13 @@ public class DefaultJSONParser implements Closeable { object.put(key, value); } else if (ch == '[') { // 减少嵌套,兼容android lexer.token = JSONToken.LBRACKET; - lexer.next(); + // lexer.next(); + { + int index = ++lexer.bp; + lexer.ch = (index >= lexer.len // + ? EOI // + : lexer.text.charAt(index)); + } ArrayList list = new ArrayList(); this.parseArray(list, key); value = new JSONArray(list); @@ -455,10 +461,11 @@ public class DefaultJSONParser implements Closeable { object.put(key, value); } - if (lexer.token == JSONToken.RBRACE) { + token = lexer.token; + if (token == JSONToken.RBRACE) { lexer.nextToken(JSONToken.COMMA); return object; - } else if (lexer.token == JSONToken.COMMA) { + } else if (token == JSONToken.COMMA) { continue; } else { throw new JSONException("syntax error, " + lexer.info()); @@ -511,25 +518,26 @@ public class DefaultJSONParser implements Closeable { setContext(context, obj, key); } - if (lexer.token == JSONToken.RBRACE) { + token = lexer.token; + if (token == JSONToken.RBRACE) { lexer.nextToken(JSONToken.COMMA); if (!disableCircularReferenceDetect) { this.contex = context; } return object; - } else if (lexer.token == JSONToken.COMMA) { + } else if (token == JSONToken.COMMA) { continue; } else { throw new JSONException("syntax error, " + lexer.info()); } - } else if (lexer.ch == 't') { + } else if (ch == 't') { if (lexer.text.startsWith("true", lexer.bp)) { lexer.bp += 3; lexer.next(); object.put(key, Boolean.TRUE); } - } else if (lexer.ch == 'f') { + } else if (ch == 'f') { if (lexer.text.startsWith("false", lexer.bp)) { lexer.bp += 4; lexer.next(); @@ -1096,20 +1104,33 @@ public class DefaultJSONParser implements Closeable { if (first_quote && lexer.ch == '"') { value = lexer.scanStringValue('"'); - if (lexer.ch == ',') { - lexer.next(); + ch = lexer.ch; + if (ch == ',') { + // lexer.next(); + { + int index = ++lexer.bp; + ch = lexer.ch = (index >= lexer.len // + ? EOI // + : lexer.text.charAt(index)); + } array.add(value); if (resolveStatus == NeedToResolve) { checkListResolve(array); } - if (lexer.ch == '"') { + if (ch == '"') { continue; } lexer.nextToken(); - } else if (lexer.ch == ']') { - lexer.next(); + } else if (ch == ']') { + // lexer.next(); + { + int index = ++lexer.bp; + lexer.ch = (index >= lexer.len // + ? EOI // + : lexer.text.charAt(index)); + } array.add(value); if (resolveStatus == NeedToResolve) { checkListResolve(array); diff --git a/src/main/java/com/alibaba/fastjson/parser/SymbolTable.java b/src/main/java/com/alibaba/fastjson/parser/SymbolTable.java index 92340f576..5347e5e39 100755 --- a/src/main/java/com/alibaba/fastjson/parser/SymbolTable.java +++ b/src/main/java/com/alibaba/fastjson/parser/SymbolTable.java @@ -87,8 +87,8 @@ public class SymbolTable { return subString(buffer, offset, len); } - String symbol = len == buffer.length() // - ? buffer // + String symbol = len == buffer.length() ? // + buffer // : subString(buffer, offset, len); symbol = symbol.intern();