This commit is contained in:
redkale
2024-10-07 12:27:08 +08:00
parent 0138e46ee5
commit ba7bbed7b1
2 changed files with 115 additions and 120 deletions

View File

@@ -457,53 +457,50 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
}
for (int i = 0; i < len; i++) {
char ch = value.charAt(i);
switch (ch) {
case '\n':
bytes[curr++] = '\\';
bytes[curr++] = 'n';
break;
case '\r':
bytes[curr++] = '\\';
bytes[curr++] = 'r';
break;
case '\f':
bytes[curr++] = '\\';
bytes[curr++] = 'f';
break;
case '\b':
bytes[curr++] = '\\';
bytes[curr++] = 'b';
break;
case '\t':
bytes[curr++] = '\\';
bytes[curr++] = 't';
break;
case '\\':
bytes[curr++] = '\\';
bytes[curr++] = '\\';
break;
case BYTE_DQUOTE:
bytes[curr++] = '\\';
bytes[curr++] = BYTE_DQUOTE;
break;
default:
if (ch < 0x80) {
if (ch < 14) {
switch (ch) {
case '\n': // 10
bytes[curr++] = '\\';
bytes[curr++] = 'n';
break;
case '\r': // 13
bytes[curr++] = '\\';
bytes[curr++] = 'r';
break;
case '\t': // 8
bytes[curr++] = '\\';
bytes[curr++] = 't';
break;
case '\f': // 12
bytes[curr++] = '\\';
bytes[curr++] = 'f';
break;
case '\b': // 9
bytes[curr++] = '\\';
bytes[curr++] = 'b';
break;
default:
bytes[curr++] = (byte) ch;
} else if (ch < 0x800) {
bytes[curr++] = (byte) (0xc0 | (ch >> 6));
bytes[curr++] = (byte) (0x80 | (ch & 0x3f));
} else if (Character.isSurrogate(ch)) { // 连取两个
int uc = Character.toCodePoint(ch, value.charAt(++i));
bytes[curr++] = (byte) (0xf0 | (uc >> 18));
bytes[curr++] = (byte) (0x80 | ((uc >> 12) & 0x3f));
bytes[curr++] = (byte) (0x80 | ((uc >> 6) & 0x3f));
bytes[curr++] = (byte) (0x80 | (uc & 0x3f));
} else {
bytes[curr++] = (byte) (0xe0 | (ch >> 12));
bytes[curr++] = (byte) (0x80 | ((ch >> 6) & 0x3f));
bytes[curr++] = (byte) (0x80 | (ch & 0x3f));
}
break;
break;
}
} else if (ch == '"' || ch == '\\') {
bytes[curr++] = '\\';
bytes[curr++] = (byte) ch;
} else if (ch < 0x80) {
bytes[curr++] = (byte) ch;
} else if (ch < 0x800) {
bytes[curr++] = (byte) (0xc0 | (ch >> 6));
bytes[curr++] = (byte) (0x80 | (ch & 0x3f));
} else if (Character.isSurrogate(ch)) { // 连取两个
int uc = Character.toCodePoint(ch, value.charAt(++i));
bytes[curr++] = (byte) (0xf0 | (uc >> 18));
bytes[curr++] = (byte) (0x80 | ((uc >> 12) & 0x3f));
bytes[curr++] = (byte) (0x80 | ((uc >> 6) & 0x3f));
bytes[curr++] = (byte) (0x80 | (uc & 0x3f));
} else {
bytes[curr++] = (byte) (0xe0 | (ch >> 12));
bytes[curr++] = (byte) (0x80 | ((ch >> 6) & 0x3f));
bytes[curr++] = (byte) (0x80 | (ch & 0x3f));
}
}
if (quote) {

View File

@@ -388,38 +388,37 @@ public class JsonCharsWriter extends JsonWriter {
}
for (int i = 0; i < len; i++) {
char ch = str.charAt(i);
switch (ch) {
case '\n':
chars[curr++] = '\\';
chars[curr++] = 'n';
break;
case '\r':
chars[curr++] = '\\';
chars[curr++] = 'r';
break;
case '\f':
chars[curr++] = '\\';
chars[curr++] = 'f';
break;
case '\b':
chars[curr++] = '\\';
chars[curr++] = 'b';
break;
case '\t':
chars[curr++] = '\\';
chars[curr++] = 't';
break;
case '\\':
chars[curr++] = '\\';
chars[curr++] = ch;
break;
case '"':
chars[curr++] = '\\';
chars[curr++] = ch;
break;
default:
chars[curr++] = ch;
break;
if (ch < 14) {
switch (ch) {
case '\n': // 10
chars[curr++] = '\\';
chars[curr++] = 'n';
break;
case '\r': // 13
chars[curr++] = '\\';
chars[curr++] = 'r';
break;
case '\t': // 8
chars[curr++] = '\\';
chars[curr++] = 't';
break;
case '\f': // 12
chars[curr++] = '\\';
chars[curr++] = 'f';
break;
case '\b': // 9
chars[curr++] = '\\';
chars[curr++] = 'b';
break;
default:
chars[curr++] = ch;
break;
}
} else if (ch == '"' || ch == '\\') {
chars[curr++] = '\\';
chars[curr++] = ch;
} else {
chars[curr++] = ch;
}
}
if (quote) {
@@ -441,38 +440,37 @@ public class JsonCharsWriter extends JsonWriter {
b1 = bytes[i];
b2 = bytes[i + 1];
char ch = (char) ((b2 == 0 && b1 >= 0) ? b1 : ((b1 & 0xff) | ((b2 & 0xff) << 8)));
switch (ch) {
case '\n':
chars[curr++] = '\\';
chars[curr++] = 'n';
break;
case '\r':
chars[curr++] = '\\';
chars[curr++] = 'r';
break;
case '\f':
chars[curr++] = '\\';
chars[curr++] = 'f';
break;
case '\b':
chars[curr++] = '\\';
chars[curr++] = 'b';
break;
case '\t':
chars[curr++] = '\\';
chars[curr++] = 't';
break;
case '\\':
chars[curr++] = '\\';
chars[curr++] = ch;
break;
case '"':
chars[curr++] = '\\';
chars[curr++] = ch;
break;
default:
chars[curr++] = ch;
break;
if (ch < 14) {
switch (ch) {
case '\n': // 10
chars[curr++] = '\\';
chars[curr++] = 'n';
break;
case '\r': // 13
chars[curr++] = '\\';
chars[curr++] = 'r';
break;
case '\t': // 8
chars[curr++] = '\\';
chars[curr++] = 't';
break;
case '\f': // 12
chars[curr++] = '\\';
chars[curr++] = 'f';
break;
case '\b': // 9
chars[curr++] = '\\';
chars[curr++] = 'b';
break;
default:
chars[curr++] = ch;
break;
}
} else if (ch == '"' || ch == '\\') {
chars[curr++] = '\\';
chars[curr++] = ch;
} else {
chars[curr++] = ch;
}
}
if (quote) {
@@ -494,22 +492,22 @@ public class JsonCharsWriter extends JsonWriter {
} else if (b == '\\') {
chars[curr++] = '\\';
chars[curr++] = '\\';
} else if (b < 32) {
if (b == '\n') {
} else if (b < 14) {
if (b == '\n') { // 10
chars[curr++] = '\\';
chars[curr++] = 'n';
} else if (b == '\r') {
} else if (b == '\r') { // 13
chars[curr++] = '\\';
chars[curr++] = 'r';
} else if (b == '\f') {
chars[curr++] = '\\';
chars[curr++] = 'f';
} else if (b == '\b') {
chars[curr++] = '\\';
chars[curr++] = 'b';
} else if (b == '\t') {
} else if (b == '\t') { // 8
chars[curr++] = '\\';
chars[curr++] = 't';
} else if (b == '\f') { // 12
chars[curr++] = '\\';
chars[curr++] = 'f';
} else if (b == '\b') { // 9
chars[curr++] = '\\';
chars[curr++] = 'b';
} else {
chars[curr++] = (char) b;
}