This commit is contained in:
kamhung
2015-11-09 16:43:54 +08:00
parent 0700c60ac8
commit e2812ba11d

View File

@@ -197,50 +197,47 @@ public final class JsonByteBufferWriter extends JsonWriter {
writeNull(); writeNull();
return; return;
} }
ByteBuffer buffer = this.buffers[index]; final char[] chs = Utility.charArray(value);
expand(1); int len = 0;
if (!buffer.hasRemaining()) buffer = nextByteBuffer(); for (char ch : chs) {
buffer.put((byte) '"');
for (char ch : Utility.charArray(value)) {
switch (ch) { switch (ch) {
case '\n': expand(2); case '\n': len += 2;
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) 'n');
break; break;
case '\r': expand(2); case '\r': len += 2;
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) 'r');
break; break;
case '\t': expand(2); case '\t': len += 2;
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) 't');
break; break;
case '\\': expand(2); case '\\': len += 2;
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
break; break;
case '"': expand(2); case '"': len += 2;
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
break; break;
default: buffer = putChar(buffer, ch); default: len++;
break; break;
} }
} }
expand(1); if (len == chs.length) {
if (!buffer.hasRemaining()) buffer = nextByteBuffer(); writeTo(true, chs, 0, len);
buffer.put((byte) '"'); } else {
StringBuilder sb = new StringBuilder(len);
for (char ch : chs) {
switch (ch) {
case '\n': sb.append("\\n");
break;
case '\r': sb.append("\\r");
break;
case '\t': sb.append("\\t");
break;
case '\\': sb.append("\\\\");
break;
case '"': sb.append("\\\"");
break;
default: sb.append(ch);
break;
}
}
char[] cs = Utility.charArray(sb);
writeTo(true, cs, 0, sb.length());
}
} }
@Override @Override