From 1a4fb9bb29188ba8474a20868ff8eda6d9b48317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sun, 31 Jan 2021 23:31:33 +0800 Subject: [PATCH] improved JSONReader performance, fix #3627 --- .../fastjson/parser/DefaultJSONParser.java | 2 + .../bvt/parser/stream/JSONReaderTest_5.java | 51 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/test/java/com/alibaba/json/bvt/parser/stream/JSONReaderTest_5.java diff --git a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java index c3ad500958..a2a97b4d0c 100644 --- a/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java +++ b/src/main/java/com/alibaba/fastjson/parser/DefaultJSONParser.java @@ -327,6 +327,8 @@ public final Object parseObject(final Map object, Object fieldName) { if (object != null && object.getClass().getName().equals(typeName)) { clazz = object.getClass(); + } else if ("java.util.HashMap".equals(typeName)) { + clazz = java.util.HashMap.class; } else { boolean allDigits = true; diff --git a/src/test/java/com/alibaba/json/bvt/parser/stream/JSONReaderTest_5.java b/src/test/java/com/alibaba/json/bvt/parser/stream/JSONReaderTest_5.java new file mode 100644 index 0000000000..83c91ad9f1 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/stream/JSONReaderTest_5.java @@ -0,0 +1,51 @@ +package com.alibaba.json.bvt.parser.stream; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSONReader; +import junit.framework.TestCase; +import org.junit.Assert; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringReader; +import java.util.HashMap; +import java.util.Map; + +public class JSONReaderTest_5 extends TestCase { + public void test_read() throws Exception { + final int COUNT = 1000 * 10; + StringBuilder buf = new StringBuilder(); + buf.append('['); + for (int i = 0; i < COUNT; ++i) { + if (i != 0) { + buf.append(','); + } + buf.append("{\"id\":").append(i).append('}'); + } + buf.append(']'); + + + JSONReader reader = new JSONReader(new StringReader(buf.toString())); + + reader.startArray(); + Map map = new HashMap(); + int count = 0; + for (;;) { + if (reader.hasNext()) { + reader.startObject(); + String key = reader.readString(); + Long value = reader.readLong(); + reader.endObject(); + count++; + } else { + break; + } + } + assertEquals(COUNT, count); + + reader.endArray(); + + reader.close(); + } +}