优化JsonWrite.writeSmallString方法

This commit is contained in:
Redkale
2019-11-18 13:42:55 +08:00
parent c7ed6574cc
commit 934c82eadd
3 changed files with 35 additions and 37 deletions

View File

@@ -106,28 +106,6 @@ public class JsonByteBufferWriter extends JsonWriter {
this.buffers[index].put((byte) ch); this.buffers[index].put((byte) ch);
} }
@Override
public void writeSmallString(String value) {
byte[] bs = Utility.byteArray(value);
int expandsize = expand(bs.length + 2);
if (expandsize == 0) {// 只需要一个buffer
final ByteBuffer buffer = this.buffers[index];
buffer.put((byte) '"');
buffer.put(bs);
buffer.put((byte) '"');
} else {
ByteBuffer buffer = this.buffers[index];
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
for (byte b : bs) {
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put(b);
}
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
}
}
@Override @Override
public void writeTo(final char[] chs, final int start, final int len) { public void writeTo(final char[] chs, final int start, final int len) {
writeTo(-1, false, chs, start, len); writeTo(-1, false, chs, start, len);
@@ -263,19 +241,39 @@ public class JsonByteBufferWriter extends JsonWriter {
* @param value String值 * @param value String值
*/ */
@Override @Override
public void writeTo(final boolean quote, final String value) { public void writeLatin1To(final boolean quote, final String value) {
char[] chs = Utility.charArray(value); byte[] bs = Utility.byteArray(value);
writeTo(-1, quote, chs, 0, chs.length); int expandsize = expand(bs.length + (quote ? 2 : 0));
if (expandsize == 0) {// 只需要一个buffer
final ByteBuffer buffer = this.buffers[index];
if (quote) buffer.put((byte) '"');
buffer.put(bs);
if (quote) buffer.put((byte) '"');
} else {
ByteBuffer buffer = this.buffers[index];
if (quote) {
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
}
for (byte b : bs) {
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put(b);
}
if (quote) {
if (!buffer.hasRemaining()) buffer = nextByteBuffer();
buffer.put((byte) '"');
}
}
} }
@Override @Override
public void writeInt(int value) { public void writeInt(int value) {
writeTo(false, String.valueOf(value)); writeLatin1To(false, String.valueOf(value));
} }
@Override @Override
public void writeLong(long value) { public void writeLong(long value) {
writeTo(false, String.valueOf(value)); writeLatin1To(false, String.valueOf(value));
} }
@Override @Override

View File

@@ -87,19 +87,19 @@ class JsonStreamWriter extends JsonByteBufferWriter {
* @param value String值 * @param value String值
*/ */
@Override @Override
public void writeTo(final boolean quote, final String value) { public void writeLatin1To(final boolean quote, final String value) {
char[] chs = Utility.charArray(value); char[] chs = Utility.charArray(value);
writeTo(quote, chs, 0, chs.length); writeTo(quote, chs, 0, chs.length);
} }
@Override @Override
public void writeInt(int value) { public void writeInt(int value) {
writeTo(false, String.valueOf(value)); writeLatin1To(false, String.valueOf(value));
} }
@Override @Override
public void writeLong(long value) { public void writeLong(long value) {
writeTo(false, String.valueOf(value)); writeLatin1To(false, String.valueOf(value));
} }
@Override @Override

View File

@@ -89,7 +89,7 @@ public class JsonWriter extends Writer {
* @param quote 是否加双引号 * @param quote 是否加双引号
* @param value 非null且不含需要转义的字符的String值 * @param value 非null且不含需要转义的字符的String值
*/ */
public void writeTo(final boolean quote, final String value) { public void writeLatin1To(final boolean quote, final String value) {
int len = value.length(); int len = value.length();
expand(len + (quote ? 2 : 0)); expand(len + (quote ? 2 : 0));
if (quote) content[count++] = '"'; if (quote) content[count++] = '"';
@@ -162,13 +162,13 @@ public class JsonWriter extends Writer {
@Override @Override
public final void writeFieldName(String fieldName, Type fieldType, int fieldPos) { public final void writeFieldName(String fieldName, Type fieldType, int fieldPos) {
if (this.comma) writeTo(','); if (this.comma) writeTo(',');
writeSmallString(fieldName); writeLatin1To(true, fieldName);
writeTo(':'); writeTo(':');
} }
@Override @Override
public void writeSmallString(String value) { public final void writeSmallString(String value) {
writeTo(true, value); writeLatin1To(true, value);
} }
@Override @Override
@@ -314,17 +314,17 @@ public class JsonWriter extends Writer {
@Override @Override
public final void writeFloat(float value) { public final void writeFloat(float value) {
writeTo(false, String.valueOf(value)); writeLatin1To(false, String.valueOf(value));
} }
@Override @Override
public final void writeDouble(double value) { public final void writeDouble(double value) {
writeTo(false, String.valueOf(value)); writeLatin1To(false, String.valueOf(value));
} }
@Override @Override
public final void writeWrapper(StringWrapper value) { public final void writeWrapper(StringWrapper value) {
writeTo(false, String.valueOf(value)); writeLatin1To(false, String.valueOf(value));
} }
@Override @Override