json
This commit is contained in:
@@ -22,9 +22,11 @@ import org.redkale.util.*;
|
||||
*/
|
||||
public class JsonByteBufferWriter extends JsonWriter {
|
||||
|
||||
private static final char[] CHARS_TUREVALUE = "true".toCharArray();
|
||||
private static final byte[] BYTES_TUREVALUE = "true".getBytes();
|
||||
|
||||
private static final char[] CHARS_FALSEVALUE = "false".toCharArray();
|
||||
private static final byte[] BYTES_FALSEVALUE = "false".getBytes();
|
||||
|
||||
private static final byte[] BYTES_NULL = new byte[] {'n', 'u', 'l', 'l'};
|
||||
|
||||
protected Charset charset;
|
||||
|
||||
@@ -313,6 +315,11 @@ public class JsonByteBufferWriter extends JsonWriter {
|
||||
return size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void writeNull() {
|
||||
writeTo(BYTES_NULL);
|
||||
}
|
||||
|
||||
/**
|
||||
* <b>注意:</b> 该String值不能为null且不会进行转义, 只用于不含需要转义字符的字符串,例如enum、double、BigInteger、BigDecimal转换的String
|
||||
*
|
||||
@@ -361,6 +368,9 @@ public class JsonByteBufferWriter extends JsonWriter {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldBooleanValue(Object fieldArray, boolean comma, boolean value) {
|
||||
if (!value && tiny()) {
|
||||
return comma;
|
||||
}
|
||||
return writeFieldLatin1Value(fieldArray, comma, false, String.valueOf(value));
|
||||
}
|
||||
|
||||
@@ -386,8 +396,13 @@ public class JsonByteBufferWriter extends JsonWriter {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldObjectValue(Object fieldArray, boolean comma, Encodeable encodeable, Object value) {
|
||||
if (value == null && !nullable()) {
|
||||
return comma;
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
int expandsize = expand(1 + bs1.length);
|
||||
@@ -411,7 +426,15 @@ public class JsonByteBufferWriter extends JsonWriter {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldStringValue(Object fieldArray, boolean comma, String value) {
|
||||
if (value == null || (tiny() && value.isEmpty())) {
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
if (tiny() && value.isEmpty()) {
|
||||
return comma;
|
||||
}
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
@@ -434,9 +457,45 @@ public class JsonByteBufferWriter extends JsonWriter {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeFieldNull(Object fieldArray, boolean comma) {
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
byte[] bs2 = BYTES_NULL;
|
||||
int expandsize = expand(bs1.length + bs2.length + 3);
|
||||
if (expandsize == 0) { // 只需要一个buffer
|
||||
final ByteBuffer buffer = this.buffers[currBufIndex];
|
||||
if (comma) buffer.put(BYTE_COMMA);
|
||||
buffer.put(bs1);
|
||||
buffer.put(bs2);
|
||||
} else {
|
||||
ByteBuffer buffer = this.buffers[currBufIndex];
|
||||
if (comma) buffer.put(BYTE_COMMA);
|
||||
for (byte b : bs1) {
|
||||
if (!buffer.hasRemaining()) {
|
||||
buffer = nextByteBuffer();
|
||||
}
|
||||
buffer.put(b);
|
||||
}
|
||||
for (byte b : bs2) {
|
||||
if (!buffer.hasRemaining()) {
|
||||
buffer = nextByteBuffer();
|
||||
}
|
||||
buffer.put(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean writeFieldLatin1Value(Object fieldArray, boolean comma, boolean quote, String value) {
|
||||
if (value == null || (tiny() && value.isEmpty())) {
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
if (tiny() && value.isEmpty()) {
|
||||
return comma;
|
||||
}
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
@@ -482,7 +541,7 @@ public class JsonByteBufferWriter extends JsonWriter {
|
||||
|
||||
@Override
|
||||
public void writeBoolean(boolean value) {
|
||||
writeTo(value ? CHARS_TUREVALUE : CHARS_FALSEVALUE);
|
||||
writeTo(value ? BYTES_TUREVALUE : BYTES_FALSEVALUE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -109,7 +109,7 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeNull() {
|
||||
public final void writeNull() {
|
||||
writeTo(BYTES_NULL);
|
||||
}
|
||||
|
||||
@@ -186,6 +186,9 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldBooleanValue(Object fieldArray, boolean comma, boolean value) {
|
||||
if (!value && tiny()) {
|
||||
return comma;
|
||||
}
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
byte[] bs2 = value ? BYTES_TUREVALUE : BYTES_FALSEVALUE;
|
||||
int len1 = bs1.length;
|
||||
@@ -245,8 +248,13 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldObjectValue(Object fieldArray, boolean comma, Encodeable encodeable, Object value) {
|
||||
if (value == null && !nullable()) {
|
||||
return comma;
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
int len1 = bs1.length;
|
||||
@@ -260,7 +268,15 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldStringValue(Object fieldArray, boolean comma, String value) {
|
||||
if (value == null || (tiny() && value.isEmpty())) {
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
if (tiny() && value.isEmpty()) {
|
||||
return comma;
|
||||
}
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
@@ -273,9 +289,31 @@ public class JsonBytesWriter extends JsonWriter implements ByteTuple {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeFieldNull(Object fieldArray, boolean comma) {
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
byte[] bs2 = BYTES_NULL;
|
||||
int len1 = bs1.length;
|
||||
int len2 = bs2.length;
|
||||
byte[] src = expand(1 + len1 + len2);
|
||||
if (comma) src[count++] = BYTE_COMMA;
|
||||
System.arraycopy(bs1, 0, src, count, len1);
|
||||
count += len1;
|
||||
System.arraycopy(bs2, 0, src, count, len2);
|
||||
count += len2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean writeFieldLatin1Value(Object fieldArray, boolean comma, boolean quote, String value) {
|
||||
if (value == null || (tiny() && value.isEmpty())) {
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
if (tiny() && value.isEmpty()) {
|
||||
return comma;
|
||||
}
|
||||
byte[] bs1 = (byte[]) fieldArray;
|
||||
|
||||
@@ -27,6 +27,8 @@ public class JsonCharsWriter extends JsonWriter {
|
||||
|
||||
private static final char[] CHARS_FALSEVALUE = "false".toCharArray();
|
||||
|
||||
private static final char[] CHARS_NULL = new char[] {'n', 'u', 'l', 'l'};
|
||||
|
||||
private static final int TENTHOUSAND_MAX = 10001;
|
||||
|
||||
private static final char[][] TENTHOUSAND_CHARS = new char[TENTHOUSAND_MAX][];
|
||||
@@ -141,6 +143,9 @@ public class JsonCharsWriter extends JsonWriter {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldBooleanValue(Object fieldArray, boolean comma, boolean value) {
|
||||
if (!value && tiny()) {
|
||||
return comma;
|
||||
}
|
||||
char[] bs1 = (char[]) fieldArray;
|
||||
char[] bs2 = value ? CHARS_TUREVALUE : CHARS_FALSEVALUE;
|
||||
int len1 = bs1.length;
|
||||
@@ -200,8 +205,13 @@ public class JsonCharsWriter extends JsonWriter {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldObjectValue(Object fieldArray, boolean comma, Encodeable encodeable, Object value) {
|
||||
if (value == null && !nullable()) {
|
||||
return comma;
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
char[] bs1 = (char[]) fieldArray;
|
||||
int len1 = bs1.length;
|
||||
@@ -215,7 +225,15 @@ public class JsonCharsWriter extends JsonWriter {
|
||||
|
||||
@Override
|
||||
public boolean writeFieldStringValue(Object fieldArray, boolean comma, String value) {
|
||||
if (value == null || (tiny() && value.isEmpty())) {
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
if (tiny() && value.isEmpty()) {
|
||||
return comma;
|
||||
}
|
||||
char[] bs1 = (char[]) fieldArray;
|
||||
@@ -228,9 +246,31 @@ public class JsonCharsWriter extends JsonWriter {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void writeFieldNull(Object fieldArray, boolean comma) {
|
||||
char[] bs1 = (char[]) fieldArray;
|
||||
char[] bs2 = CHARS_NULL;
|
||||
int len1 = bs1.length;
|
||||
int len2 = bs2.length;
|
||||
char[] src = expand(1 + len1 + len2);
|
||||
if (comma) src[count++] = BYTE_COMMA;
|
||||
System.arraycopy(bs1, 0, src, count, len1);
|
||||
count += len1;
|
||||
System.arraycopy(bs2, 0, src, count, len2);
|
||||
count += len2;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean writeFieldLatin1Value(Object fieldArray, boolean comma, boolean quote, String value) {
|
||||
if (value == null || (tiny() && value.isEmpty())) {
|
||||
if (value == null) {
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
if (tiny() && value.isEmpty()) {
|
||||
return comma;
|
||||
}
|
||||
char[] bs1 = (char[]) fieldArray;
|
||||
@@ -265,6 +305,11 @@ public class JsonCharsWriter extends JsonWriter {
|
||||
return this.count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void writeNull() {
|
||||
writeTo(CHARS_NULL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeString(String value) {
|
||||
if (value == null) {
|
||||
|
||||
@@ -22,8 +22,6 @@ public abstract class JsonWriter extends Writer {
|
||||
"redkale.convert.json.writer.buffer.defsize",
|
||||
Integer.getInteger("redkale.convert.writer.buffer.defsize", 1024));
|
||||
|
||||
private static final char[] CHARS_NULL = new char[] {'n', 'u', 'l', 'l'};
|
||||
|
||||
protected static final byte BYTE_NEGATIVE = '-';
|
||||
|
||||
protected static final byte BYTE_COMMA = ',';
|
||||
@@ -61,12 +59,11 @@ public abstract class JsonWriter extends Writer {
|
||||
// -----------------------------------------------------------------------
|
||||
public abstract void writeTo(final char ch); // 只能是 0 - 127 的字符
|
||||
|
||||
public abstract void writeTo(final char[] chs, final int start, final int len); // 只能是 0 - 127 的字符
|
||||
public abstract void writeTo(final char[] cs, final int start, final int len); // 只能是 0 - 127 的字符
|
||||
|
||||
public abstract void writeTo(final byte ch); // 只能是 0 - 127 的字符
|
||||
|
||||
public abstract void writeTo(final byte[] chs, final int start, final int len); // 只能是 0 - 127 的字符
|
||||
|
||||
public abstract void writeTo(final byte[] bs, final int start, final int len); // 只能是 0 - 127 的字符
|
||||
/**
|
||||
* <b>注意:</b> 该String值不能为null且不会进行转义, 只用于不含需要转义字符的字符串,例如enum、double、BigInteger、BigDecimal转换的String
|
||||
*
|
||||
@@ -76,6 +73,10 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public abstract void writeLatin1To(final boolean quote, final String value);
|
||||
|
||||
@Override
|
||||
@ClassDepends
|
||||
public abstract void writeNull();
|
||||
|
||||
// ---------------------------- writeFieldXXXValue 调用前不需要判断值是否为null ----------------------------
|
||||
@ClassDepends
|
||||
public abstract boolean writeFieldBooleanValue(Object fieldArray, boolean comma, boolean value);
|
||||
@@ -110,7 +111,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldBooleanValue(Object fieldArray, boolean comma, Boolean value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldBooleanValue(fieldArray, comma, value.booleanValue());
|
||||
}
|
||||
@@ -118,7 +124,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldByteValue(Object fieldArray, boolean comma, Byte value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldByteValue(fieldArray, comma, value.byteValue());
|
||||
}
|
||||
@@ -126,7 +137,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldShortValue(Object fieldArray, boolean comma, Short value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldShortValue(fieldArray, comma, value.shortValue());
|
||||
}
|
||||
@@ -134,7 +150,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldCharValue(Object fieldArray, boolean comma, Character value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldIntValue(fieldArray, comma, value.charValue());
|
||||
}
|
||||
@@ -142,7 +163,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldIntValue(Object fieldArray, boolean comma, Integer value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldIntValue(fieldArray, comma, value.intValue());
|
||||
}
|
||||
@@ -150,7 +176,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldFloatValue(Object fieldArray, boolean comma, Float value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldLatin1Value(fieldArray, comma, false, String.valueOf(value));
|
||||
}
|
||||
@@ -158,7 +189,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldLongValue(Object fieldArray, boolean comma, Long value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldLongValue(fieldArray, comma, value.longValue());
|
||||
}
|
||||
@@ -166,7 +202,12 @@ public abstract class JsonWriter extends Writer {
|
||||
@ClassDepends
|
||||
public final boolean writeFieldDoubleValue(Object fieldArray, boolean comma, Double value) {
|
||||
if (value == null) {
|
||||
return comma;
|
||||
if (nullable()) {
|
||||
writeFieldNull(fieldArray, comma);
|
||||
return true;
|
||||
} else {
|
||||
return comma;
|
||||
}
|
||||
}
|
||||
return writeFieldLatin1Value(fieldArray, comma, false, String.valueOf(value));
|
||||
}
|
||||
@@ -183,6 +224,8 @@ public abstract class JsonWriter extends Writer {
|
||||
public abstract boolean writeFieldObjectValue(
|
||||
Object fieldArray, boolean comma, Encodeable encodeable, Object value);
|
||||
|
||||
protected abstract void writeFieldNull(Object fieldArray, boolean comma);
|
||||
|
||||
protected abstract boolean writeFieldLatin1Value(Object fieldArray, boolean comma, boolean quote, String value);
|
||||
|
||||
// ---------------------------- writeFieldXXXValue 主要供JsonDynEncoder使用 ----------------------------
|
||||
@@ -228,12 +271,12 @@ public abstract class JsonWriter extends Writer {
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------------
|
||||
public final void writeTo(final char... chs) { // 只能是 0 - 127 的字符
|
||||
writeTo(chs, 0, chs.length);
|
||||
public final void writeTo(final char... cs) { // 只能是 0 - 127 的字符
|
||||
writeTo(cs, 0, cs.length);
|
||||
}
|
||||
|
||||
public final void writeTo(final byte[] chs) { // 只能是 0 - 127 的字符
|
||||
writeTo(chs, 0, chs.length);
|
||||
public final void writeTo(final byte[] bs) { // 只能是 0 - 127 的字符
|
||||
writeTo(bs, 0, bs.length);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -290,11 +333,6 @@ public abstract class JsonWriter extends Writer {
|
||||
writeTo(BYTE_RBRACE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeNull() {
|
||||
writeTo(CHARS_NULL);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
|
||||
writeTo(BYTE_LBRACKET);
|
||||
|
||||
Reference in New Issue
Block a user