Skip to content

Commit db76e69

Browse files
authored
fix: Reduce memory allocations and improve performance in JSONObject
1 parent de8fab6 commit db76e69

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

subprojects/json-lib-core/src/main/java/org/kordamp/json/JSONObject.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ public static JSONObject fromJSONTokener(JSONTokener tokener, JsonConfig jsonCon
656656
String key;
657657
Object value;
658658

659-
if (tokener.matches("null.*")) {
659+
if (tokener.startsWith("null")) {
660660
fireObjectStartEvent(jsonConfig);
661661
fireObjectEndEvent(jsonConfig);
662662
return new JSONObject(true);

subprojects/json-lib-core/src/main/java/org/kordamp/json/util/JSONTokener.java

+4
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ public boolean matches(String pattern) {
114114
.matches(str);
115115
}
116116

117+
public boolean startsWith(String prefix) {
118+
return this.mySource.startsWith(prefix, this.myIndex);
119+
}
120+
117121
/**
118122
* Determine if the source string still contains characters that next() can
119123
* consume.

subprojects/json-lib-core/src/test/java/org/kordamp/json/util/TestJSONTokener.java

+14
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,20 @@ public void testNextChar() {
7575
}
7676
}
7777

78+
public void testStartsWith() {
79+
assertFalse(new JSONTokener("").startsWith("null"));
80+
assertFalse(new JSONTokener("n").startsWith("null"));
81+
assertFalse(new JSONTokener("nu").startsWith("null"));
82+
assertFalse(new JSONTokener("nul").startsWith("null"));
83+
assertTrue(new JSONTokener("null").startsWith("null"));
84+
assertTrue(new JSONTokener("nulll").startsWith("null"));
85+
assertFalse(new JSONTokener("nn").startsWith("null"));
86+
assertFalse(new JSONTokener("nnu").startsWith("null"));
87+
assertFalse(new JSONTokener("nnul").startsWith("null"));
88+
assertFalse(new JSONTokener("nnull").startsWith("null"));
89+
assertFalse(new JSONTokener("nnulll").startsWith("null"));
90+
}
91+
7892
public void testReset() {
7993
JSONTokener tok = new JSONTokener("abc");
8094
tok.next();

0 commit comments

Comments
 (0)