Skip to content

Commit 1a73e9b

Browse files
committed
simplify JSONWriterUTF8
1 parent 2c90256 commit 1a73e9b

File tree

6 files changed

+45
-57
lines changed

6 files changed

+45
-57
lines changed

core/src/main/java/com/alibaba/fastjson2/JSONWriter.java

+2-8
Original file line numberDiff line numberDiff line change
@@ -605,11 +605,7 @@ public static JSONWriter of(Context context) {
605605
jsonWriter = new JSONWriterUTF16JDK8(context);
606606
}
607607
} else if ((context.features & OptimizedForAscii.mask) != 0) {
608-
if (STRING_VALUE != null) {
609-
jsonWriter = new JSONWriterUTF8JDK9(context);
610-
} else {
611-
jsonWriter = new JSONWriterUTF8(context);
612-
}
608+
jsonWriter = new JSONWriterUTF8(context);
613609
} else {
614610
if (FIELD_STRING_VALUE != null && STRING_CODER != null && STRING_VALUE != null) {
615611
jsonWriter = new JSONWriterUTF16JDK9UF(context);
@@ -711,9 +707,7 @@ public static JSONWriter ofUTF8() {
711707
}
712708

713709
public static JSONWriter ofUTF8(JSONWriter.Context context) {
714-
return STRING_VALUE != null
715-
? new JSONWriterUTF8JDK9(context)
716-
: new JSONWriterUTF8(context);
710+
return new JSONWriterUTF8(context);
717711
}
718712

719713
public static JSONWriter ofUTF8(Feature... features) {

core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF8.java

+31-5
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import static com.alibaba.fastjson2.util.JDKUtils.*;
2525
import static com.alibaba.fastjson2.util.TypeUtils.isInt64;
2626

27-
class JSONWriterUTF8
27+
final class JSONWriterUTF8
2828
extends JSONWriter {
2929
static final long REF;
3030
static final short QUOTE2_COLON, QUOTE_COLON;
@@ -38,8 +38,8 @@ class JSONWriterUTF8
3838
}
3939

4040
final CacheItem cacheItem;
41-
protected byte[] bytes;
42-
protected final long byteVectorQuote;
41+
byte[] bytes;
42+
private final long byteVectorQuote;
4343

4444
JSONWriterUTF8(Context ctx) {
4545
super(ctx, null, false, StandardCharsets.UTF_8);
@@ -342,8 +342,21 @@ public final void writeString(List<String> list) {
342342
this.off = off + 1;
343343
}
344344

345-
writeString(
346-
list.get(i));
345+
String str = list.get(i);
346+
if (str == null) {
347+
writeStringNull();
348+
} else {
349+
if (STRING_VALUE != null) {
350+
byte[] value = STRING_VALUE.apply(str);
351+
if (STRING_CODER.applyAsInt(str) == 0) {
352+
writeStringLatin1(value);
353+
} else {
354+
writeStringUTF16(value);
355+
}
356+
} else {
357+
writeStringJDK8(str);
358+
}
359+
}
347360
}
348361

349362
off = this.off;
@@ -419,6 +432,19 @@ public void writeString(String str) {
419432
return;
420433
}
421434

435+
if (STRING_VALUE != null) {
436+
byte[] value = STRING_VALUE.apply(str);
437+
if (STRING_CODER.applyAsInt(str) == 0) {
438+
writeStringLatin1(value);
439+
} else {
440+
writeStringUTF16(value);
441+
}
442+
} else {
443+
writeStringJDK8(str);
444+
}
445+
}
446+
447+
private void writeStringJDK8(String str) {
422448
char[] chars = getCharArray(str);
423449

424450
boolean browserSecure = (context.features & BrowserSecure.mask) != 0;

core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF8JDK9.java

-25
This file was deleted.

core/src/test/java/com/alibaba/fastjson2/EscapeNoneAsciiTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void testJSONWriterUTF8JDK9() {
5353
String STR = STRINGS[i];
5454
String JSON_STR = JSON_STRINGS[i];
5555
JSONWriter.Context context = JSONFactory.createWriteContext(JSONWriter.Feature.EscapeNoneAscii);
56-
JSONWriter jsonWriter = new JSONWriterUTF8JDK9(context);
56+
JSONWriter jsonWriter = new JSONWriterUTF8(context);
5757
jsonWriter.writeString(STR);
5858
String str = jsonWriter.toString();
5959
assertEquals(JSON_STR, str);

core/src/test/java/com/alibaba/fastjson2/JSONWriterUTF8JDK9Test.java

+10-17
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,13 @@
99
import static org.junit.jupiter.api.Assertions.assertEquals;
1010

1111
public class JSONWriterUTF8JDK9Test {
12-
@Test
13-
public void test_writeString() {
14-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
15-
jsonWriter.writeString((String) null);
16-
assertEquals("null", jsonWriter.toString());
17-
}
18-
1912
@Test
2013
public void test_writeString_1() {
2114
if (STRING_VALUE == null) {
2215
return;
2316
}
2417

25-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
18+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
2619
jsonWriter.writeString("a");
2720
assertEquals("\"a\"", jsonWriter.toString());
2821
}
@@ -33,7 +26,7 @@ public void test_writeString_2() {
3326
return;
3427
}
3528

36-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
29+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
3730
jsonWriter.writeString("\"\"");
3831
assertEquals("\"\\\"\\\"\"", jsonWriter.toString());
3932
}
@@ -44,7 +37,7 @@ public void test_writeString_3() {
4437
return;
4538
}
4639

47-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
40+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
4841
jsonWriter.writeString("abc");
4942
assertEquals("\"abc\"", jsonWriter.toString());
5043
}
@@ -55,7 +48,7 @@ public void test_writeString_4() {
5548
return;
5649
}
5750

58-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
51+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
5952
jsonWriter.writeString("abcdefghijklmn01234567890");
6053
assertEquals("\"abcdefghijklmn01234567890\"", jsonWriter.toString());
6154
}
@@ -66,7 +59,7 @@ public void test_writeString_utf8() {
6659
return;
6760
}
6861

69-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
62+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
7063
jsonWriter.writeString("中国");
7164
assertEquals("\"中国\"", jsonWriter.toString());
7265
}
@@ -77,7 +70,7 @@ public void test_writeString_utf8_1() {
7770
return;
7871
}
7972

80-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
73+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
8174
jsonWriter.writeString("^á");
8275
assertEquals("\"\"", jsonWriter.toString());
8376
}
@@ -96,7 +89,7 @@ public void test_writeString_utf82() {
9689
buf.append('á');
9790
String origin = buf.toString();
9891

99-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
92+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
10093
jsonWriter.writeString(origin);
10194
String json = jsonWriter.toString();
10295
String str = (String) JSON.parse(json);
@@ -113,7 +106,7 @@ public void test_writeString_utf8_3() {
113106
return;
114107
}
115108

116-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
109+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
117110

118111
JSONObject map = new JSONObject();
119112
map.put("^á", 0);
@@ -130,7 +123,7 @@ public void test_writeString_special() {
130123
return;
131124
}
132125

133-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
126+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
134127
jsonWriter.writeString("\r\n\t\f\b\"");
135128
assertEquals("\"\\r\\n\\t\\f\\b\\\"\"", jsonWriter.toString());
136129
}
@@ -143,7 +136,7 @@ public void test_writeString_large() {
143136

144137
char[] chars = new char[2048];
145138
Arrays.fill(chars, 'a');
146-
JSONWriterUTF8JDK9 jsonWriter = new JSONWriterUTF8JDK9(JSONFactory.createWriteContext());
139+
JSONWriterUTF8 jsonWriter = new JSONWriterUTF8(JSONFactory.createWriteContext());
147140
jsonWriter.writeString(new String(chars));
148141
assertEquals(chars.length + 2, jsonWriter.toString().length());
149142
}

core/src/test/java/com/alibaba/fastjson2/TestUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static JSONWriter[] createJSONWriters() {
6363
}
6464

6565
return new JSONWriter[]{
66-
new JSONWriterUTF8JDK9(JSONFactory.createWriteContext()),
66+
new JSONWriterUTF8(JSONFactory.createWriteContext()),
6767
new JSONWriterUTF16(JSONFactory.createWriteContext()),
6868
new JSONWriterUTF16JDK9UF(JSONFactory.createWriteContext())
6969
};

0 commit comments

Comments
 (0)