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();
return;
}
ByteBuffer buffer = this.buffers[index];
expand(1);
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
for (char ch : Utility.charArray(value)) {
final char[] chs = Utility.charArray(value);
int len = 0;
for (char ch : chs) {
switch (ch) {
case '\n': expand(2);
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) 'n');
case '\n': len += 2;
break;
case '\r': expand(2);
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) 'r');
case '\r': len += 2;
break;
case '\t': expand(2);
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) 't');
case '\t': len += 2;
break;
case '\\': expand(2);
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
case '\\': len += 2;
break;
case '"': expand(2);
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '\\');
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
case '"': len += 2;
break;
default: buffer = putChar(buffer, ch);
default: len++;
break;
}
}
expand(1);
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
if (len == chs.length) {
writeTo(true, chs, 0, len);
} 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