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

View File

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