From 4b9cf768f49ef2514e2300d13a7bceeb41a5912a Mon Sep 17 00:00:00 2001 From: RedKale <22250530@qq.com> Date: Tue, 23 Feb 2016 08:58:42 +0800 Subject: [PATCH] --- src/org/redkale/convert/json/JsonReader.java | 43 ++++++++++++-------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/org/redkale/convert/json/JsonReader.java b/src/org/redkale/convert/json/JsonReader.java index ae4f2e712..b19944357 100644 --- a/src/org/redkale/convert/json/JsonReader.java +++ b/src/org/redkale/convert/json/JsonReader.java @@ -349,14 +349,10 @@ public class JsonReader extends Reader { for (;;) { if (currpos == eof) break; char ch = text0[++currpos]; - if (ch >= '0' && ch <= '9') { - value = (value << 3) + (value << 1) + (ch - '0'); - } else if (ch == '"' || ch == '\'') { - } else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') { - break; - } else { - throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") in (" + new String(this.text) + ")"); - } + int val = digits[ch]; + if (val == -3) break; + if (val == -1) throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") but '" + ch + "' in (" + new String(this.text) + ")"); + if (val != -2) value = value * 10 + val; } this.position = currpos - 1; return negative ? -value : value; @@ -395,14 +391,10 @@ public class JsonReader extends Reader { for (;;) { if (currpos == eof) break; char ch = text0[++currpos]; - if (ch >= '0' && ch <= '9') { - value = (value << 3) + (value << 1) + (ch - '0'); - } else if (ch == '"' || ch == '\'') { - } else if (ch == ',' || ch == '}' || ch == ']' || ch <= ' ' || ch == ':') { - break; - } else { - throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") but '" + ch + "' in (" + new String(this.text) + ")"); - } + int val = digits[ch]; + if (val == -3) break; + if (val == -1) throw new ConvertException("illegal escape(" + ch + ") (position = " + currpos + ") but '" + ch + "' in (" + new String(this.text) + ")"); + if (val != -2) value = value * 10 + val; } this.position = currpos - 1; return negative ? -value : value; @@ -568,4 +560,23 @@ public class JsonReader extends Reader { } } + final static int[] digits = new int[255]; + + static { + for (int i = 0; i < digits.length; i++) { + digits[i] = -1; //-1 错误 + } + for (int i = '0'; i <= '9'; i++) { + digits[i] = i - '0'; + } + for (int i = 'a'; i <= 'f'; i++) { + digits[i] = i - 'a' + 10; + } + for (int i = 'A'; i <= 'F'; i++) { + digits[i] = i - 'A' + 10; + } + digits['"'] = digits['\''] = -2; //-2 跳过 + digits[','] = digits['}'] = digits[']'] = digits[' '] = digits[':'] = -3; //-3退出 + + } }