This commit is contained in:
redkale
2024-09-27 10:27:31 +08:00
parent a0472438c8
commit de5114a480
27 changed files with 355 additions and 394 deletions

View File

@@ -71,22 +71,7 @@ public class ArrayDecoder<R extends Reader, T> implements TagDecodeable<R, T[]>
} }
} }
@Override protected void checkInited() {
public T[] convertFrom(R in) {
return convertFrom(in, null);
}
public T[] convertFrom(R in, DeMember member) {
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, componentDecoder);
int contentLength = -1;
if (len == Reader.SIGN_NULL) {
return null;
}
if (len == Reader.SIGN_NOLENBUTBYTES) {
contentLength = in.readMemberContentLength(member, componentDecoder);
len = Reader.SIGN_NOLENGTH;
}
if (this.componentDecoder == null) { if (this.componentDecoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
@@ -99,6 +84,25 @@ public class ArrayDecoder<R extends Reader, T> implements TagDecodeable<R, T[]>
} }
} }
} }
}
@Override
public T[] convertFrom(R in) {
return convertFrom(in, null);
}
public T[] convertFrom(R in, DeMember member) {
this.checkInited();
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, componentDecoder);
int contentLength = -1;
if (len == Reader.SIGN_NULL) {
return null;
}
if (len == Reader.SIGN_NOLENBUTBYTES) {
contentLength = in.readMemberContentLength(member, componentDecoder);
len = Reader.SIGN_NOLENGTH;
}
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals); final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
final List<T> result = new ArrayList(); final List<T> result = new ArrayList();
boolean first = true; boolean first = true;

View File

@@ -69,24 +69,8 @@ public class ArrayEncoder<W extends Writer, T> implements Encodeable<W, T[]> {
} }
} }
@Override protected void checkInited() {
public void convertTo(W out, T[] value) { if (this.componentEncoder == null) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, T[] value) {
if (value == null) {
out.writeNull();
return;
}
int iMax = value.length - 1;
if (iMax == -1) {
out.writeArrayB(0, this, componentEncoder, value);
out.writeArrayE();
return;
}
Encodeable<W, Object> itemEncoder = this.componentEncoder;
if (itemEncoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
try { try {
@@ -96,37 +80,54 @@ public class ArrayEncoder<W extends Writer, T> implements Encodeable<W, T[]> {
} finally { } finally {
lock.unlock(); lock.unlock();
} }
itemEncoder = this.componentEncoder;
} }
} }
}
@Override
public void convertTo(W out, T[] value) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, T[] value) {
this.checkInited();
if (value == null) {
out.writeNull();
return;
}
int iMax = value.length - 1;
if (iMax == -1) {
out.writeArrayB(0, componentEncoder, value);
out.writeArrayE();
return;
}
Encodeable<W, Object> itemEncoder = this.componentEncoder;
if (subTypeFinal) { if (subTypeFinal) {
if (out.writeArrayB(value.length, this, itemEncoder, value) < 0) { out.writeArrayB(value.length, itemEncoder, value);
for (int i = 0; ; i++) { for (int i = 0; ; i++) {
writeMemberValue(out, member, itemEncoder, value[i], i); writeMemberValue(out, member, itemEncoder, value[i], i);
if (i == iMax) { if (i == iMax) {
break; break;
}
out.writeArrayMark();
} }
out.writeArrayMark();
} }
} else { } else {
if (out.writeArrayB(value.length, this, itemEncoder, value) < 0) { out.writeArrayB(value.length, itemEncoder, value);
final Type comp = this.componentType; final Type comp = this.componentType;
for (int i = 0; ; i++) { for (int i = 0; ; i++) {
Object v = value[i]; Object v = value[i];
writeMemberValue( writeMemberValue(
out, out,
member, member,
((v != null && (v.getClass() == comp || out.specificObjectType() == comp)) ((v != null && (v.getClass() == comp || out.specificObjectType() == comp))
? itemEncoder ? itemEncoder
: anyEncoder), : anyEncoder),
v, v,
i); i);
if (i == iMax) { if (i == iMax) {
break; break;
}
out.writeArrayMark();
} }
out.writeArrayMark();
} }
} }
out.writeArrayE(); out.writeArrayE();

View File

@@ -76,22 +76,7 @@ public class CollectionDecoder<R extends Reader, T> implements TagDecodeable<R,
this.inited = true; this.inited = true;
} }
@Override protected void checkInited() {
public Collection<T> convertFrom(R in) {
return convertFrom(in, null);
}
public Collection<T> convertFrom(R in, DeMember member) {
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, componentDecoder);
int contentLength = -1;
if (len == Reader.SIGN_NULL) {
return null;
}
if (len == Reader.SIGN_NOLENBUTBYTES) {
contentLength = in.readMemberContentLength(member, componentDecoder);
len = Reader.SIGN_NOLENGTH;
}
if (this.componentDecoder == null) { if (this.componentDecoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
@@ -104,6 +89,25 @@ public class CollectionDecoder<R extends Reader, T> implements TagDecodeable<R,
} }
} }
} }
}
@Override
public Collection<T> convertFrom(R in) {
return convertFrom(in, null);
}
public Collection<T> convertFrom(R in, DeMember member) {
this.checkInited();
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, componentDecoder);
int contentLength = -1;
if (len == Reader.SIGN_NULL) {
return null;
}
if (len == Reader.SIGN_NOLENBUTBYTES) {
contentLength = in.readMemberContentLength(member, componentDecoder);
len = Reader.SIGN_NOLENGTH;
}
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals); final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
final Collection<T> result = this.creator.create(); final Collection<T> result = this.creator.create();
boolean first = true; boolean first = true;

View File

@@ -56,21 +56,7 @@ public class CollectionEncoder<W extends Writer, T> implements Encodeable<W, Col
} }
} }
@Override protected void checkInited() {
public void convertTo(W out, Collection<T> value) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, Collection<T> value) {
if (value == null) {
out.writeNull();
return;
}
if (value.isEmpty()) {
out.writeArrayB(0, this, componentEncoder, value);
out.writeArrayE();
return;
}
if (this.componentEncoder == null) { if (this.componentEncoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
@@ -83,16 +69,33 @@ public class CollectionEncoder<W extends Writer, T> implements Encodeable<W, Col
} }
} }
} }
if (out.writeArrayB(value.size(), this, componentEncoder, value) < 0) { }
boolean first = true;
for (Object v : value) { @Override
if (!first) { public void convertTo(W out, Collection<T> value) {
out.writeArrayMark(); convertTo(out, null, value);
} }
writeMemberValue(out, member, v, first);
if (first) { public void convertTo(W out, EnMember member, Collection<T> value) {
first = false; this.checkInited();
} if (value == null) {
out.writeNull();
return;
}
if (value.isEmpty()) {
out.writeArrayB(0, componentEncoder, value);
out.writeArrayE();
return;
}
out.writeArrayB(value.size(), componentEncoder, value);
boolean first = true;
for (Object v : value) {
if (!first) {
out.writeArrayMark();
}
writeMemberValue(out, member, v, first);
if (first) {
first = false;
} }
} }
out.writeArrayE(); out.writeArrayE();

View File

@@ -98,12 +98,7 @@ public class MapDecoder<R extends Reader, K, V> implements TagDecodeable<R, Map<
this.inited = true; this.inited = true;
} }
@Override protected void checkInited() {
public Map<K, V> convertFrom(R in) {
return convertFrom(in, null);
}
public Map<K, V> convertFrom(R in, DeMember member) {
if (this.keyDecoder == null || this.valueDecoder == null) { if (this.keyDecoder == null || this.valueDecoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
@@ -116,6 +111,16 @@ public class MapDecoder<R extends Reader, K, V> implements TagDecodeable<R, Map<
} }
} }
} }
}
@Override
public Map<K, V> convertFrom(R in) {
return convertFrom(in, null);
}
@Override
public Map<K, V> convertFrom(R in, DeMember member) {
this.checkInited();
byte[] typevals = new byte[2]; byte[] typevals = new byte[2];
int len = in.readMapB(member, typevals, this.keyDecoder, this.valueDecoder); int len = in.readMapB(member, typevals, this.keyDecoder, this.valueDecoder);
int contentLength = -1; int contentLength = -1;

View File

@@ -66,18 +66,7 @@ public class MapEncoder<W extends Writer, K, V> implements Encodeable<W, Map<K,
} }
} }
@Override protected void checkInited() {
public void convertTo(W out, Map<K, V> value) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, Map<K, V> value) {
final Map<K, V> values = value;
if (values == null) {
out.writeNull();
return;
}
if (this.keyEncoder == null || this.valueEncoder == null) { if (this.keyEncoder == null || this.valueEncoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
@@ -90,22 +79,35 @@ public class MapEncoder<W extends Writer, K, V> implements Encodeable<W, Map<K,
} }
} }
} }
}
@Override
public void convertTo(W out, Map<K, V> value) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, Map<K, V> value) {
this.checkInited();
final Map<K, V> values = value;
if (values == null) {
out.writeNull();
return;
}
Set<String> ignoreColumns = this.ignoreMapColumns; Set<String> ignoreColumns = this.ignoreMapColumns;
BiFunction<K, V, V> mapFieldFunc = (BiFunction) out.mapFieldFunc; BiFunction<K, V, V> mapFieldFunc = (BiFunction) out.mapFieldFunc;
if (out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value) < 0) { out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value);
boolean first = true; boolean first = true;
for (Map.Entry<K, V> en : values.entrySet()) { for (Map.Entry<K, V> en : values.entrySet()) {
if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) { if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) {
continue; continue;
} }
V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue()); V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue());
if (!first) { if (!first) {
out.writeArrayMark(); out.writeArrayMark();
} }
writeMemberValue(out, member, en.getKey(), v, first); writeMemberValue(out, member, en.getKey(), v, first);
if (first) { if (first) {
first = false; first = false;
}
} }
} }
out.writeMapE(); out.writeMapE();

View File

@@ -7,8 +7,7 @@ package org.redkale.convert;
import java.lang.reflect.*; import java.lang.reflect.*;
import java.util.*; import java.util.*;
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.*;
import java.util.concurrent.locks.ReentrantLock;
import org.redkale.annotation.Nullable; import org.redkale.annotation.Nullable;
import org.redkale.convert.ext.StringSimpledCoder; import org.redkale.convert.ext.StringSimpledCoder;
import org.redkale.util.*; import org.redkale.util.*;
@@ -338,22 +337,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
this.memberInfo = DeMemberInfo.create(deMembers); this.memberInfo = DeMemberInfo.create(deMembers);
} }
/** protected void checkInited() {
* 对象格式: [0x1][short字段个数][字段名][字段值]...[0x2]
*
* @param in 输入流
* @return 反解析后的对象结果
*/
@Override
public T convertFrom(final R in) {
R objin = objectReader(in);
final String clazz = objin.readObjectB(typeClass);
if (clazz == null) {
return null;
}
if (!clazz.isEmpty()) {
return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(objin);
}
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
try { try {
@@ -364,6 +348,25 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
lock.unlock(); lock.unlock();
} }
} }
}
/**
* 对象格式: [0x1][short字段个数][字段名][字段值]...[0x2]
*
* @param in 输入流
* @return 反解析后的对象结果
*/
@Override
public T convertFrom(final R in) {
this.checkInited();
R objin = objectReader(in);
final String clazz = objin.readObjectB(typeClass);
if (clazz == null) {
return null;
}
if (!clazz.isEmpty()) {
return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(objin);
}
if (this.creator == null) { if (this.creator == null) {
if (typeClass.isInterface() || Modifier.isAbstract(typeClass.getModifiers())) { if (typeClass.isInterface() || Modifier.isAbstract(typeClass.getModifiers())) {
throw new ConvertException( throw new ConvertException(

View File

@@ -9,7 +9,7 @@ import java.lang.reflect.*;
import java.util.*; import java.util.*;
import java.util.concurrent.locks.*; import java.util.concurrent.locks.*;
import org.redkale.annotation.ConstructorParameters; import org.redkale.annotation.ConstructorParameters;
import org.redkale.annotation.Nullable; import org.redkale.annotation.*;
import org.redkale.convert.ext.StringSimpledCoder; import org.redkale.convert.ext.StringSimpledCoder;
import org.redkale.util.*; import org.redkale.util.*;
@@ -309,12 +309,7 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
this.members = enMembers; this.members = enMembers;
} }
@Override protected void checkInited() {
public void convertTo(W out, T value) {
if (value == null) {
out.writeObjectNull(null);
return;
}
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
try { try {
@@ -325,6 +320,15 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
lock.unlock(); lock.unlock();
} }
} }
}
@Override
public void convertTo(W out, T value) {
this.checkInited();
if (value == null) {
out.writeObjectNull(null);
return;
}
if (value.getClass() != this.typeClass && !this.type.equals(out.specificObjectType())) { if (value.getClass() != this.typeClass && !this.type.equals(out.specificObjectType())) {
final Class clz = value.getClass(); final Class clz = value.getClass();
if (out.needWriteClassName()) { if (out.needWriteClassName()) {
@@ -334,28 +338,27 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
return; return;
} }
W objout = objectWriter(out, value); W objout = objectWriter(out, value);
if (objout.writeObjectB(value) < 0) { objout.writeObjectB(value);
int maxPosition = 0; int maxPosition = 0;
for (EnMember member : members) { for (EnMember member : members) {
maxPosition = member.getPosition(); maxPosition = member.getPosition();
objout.writeObjectField(member, value); objout.writeObjectField(member, value);
} }
if (objout.objExtFunc != null) { if (objout.objExtFunc != null) {
ConvertField[] extFields = objout.objExtFunc.apply(value); ConvertField[] extFields = objout.objExtFunc.apply(value);
if (extFields != null) { if (extFields != null) {
Encodeable<W, ?> anyEncoder = factory.getAnyEncoder(); Encodeable<W, ?> anyEncoder = factory.getAnyEncoder();
for (ConvertField en : extFields) { for (ConvertField en : extFields) {
if (en == null) { if (en == null) {
continue; continue;
}
maxPosition++;
objout.writeObjectField(
en.getName(),
en.getType(),
Math.max(en.getPosition(), maxPosition),
anyEncoder,
en.getValue());
} }
maxPosition++;
objout.writeObjectField(
en.getName(),
en.getType(),
Math.max(en.getPosition(), maxPosition),
anyEncoder,
en.getValue());
} }
} }
} }

View File

@@ -57,22 +57,7 @@ public class StreamDecoder<R extends Reader, T> implements TagDecodeable<R, Stre
} }
} }
@Override protected void checkInited() {
public Stream<T> convertFrom(R in) {
return convertFrom(in, null);
}
public Stream<T> convertFrom(R in, DeMember member) {
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, this.componentDecoder);
int contentLength = -1;
if (len == Reader.SIGN_NULL) {
return null;
}
if (len == Reader.SIGN_NOLENBUTBYTES) {
contentLength = in.readMemberContentLength(member, this.componentDecoder);
len = Reader.SIGN_NOLENGTH;
}
if (this.componentDecoder == null) { if (this.componentDecoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
@@ -85,6 +70,25 @@ public class StreamDecoder<R extends Reader, T> implements TagDecodeable<R, Stre
} }
} }
} }
}
@Override
public Stream<T> convertFrom(R in) {
return convertFrom(in, null);
}
public Stream<T> convertFrom(R in, DeMember member) {
this.checkInited();
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, this.componentDecoder);
int contentLength = -1;
if (len == Reader.SIGN_NULL) {
return null;
}
if (len == Reader.SIGN_NOLENBUTBYTES) {
contentLength = in.readMemberContentLength(member, this.componentDecoder);
len = Reader.SIGN_NOLENGTH;
}
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals); final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
final List<T> result = new ArrayList(); final List<T> result = new ArrayList();
boolean first = true; boolean first = true;

View File

@@ -56,22 +56,7 @@ public class StreamEncoder<W extends Writer, T> implements Encodeable<W, Stream<
} }
} }
@Override protected void checkInited() {
public void convertTo(W out, Stream<T> value) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, Stream<T> value) {
if (value == null) {
out.writeNull();
return;
}
Object[] array = value.toArray();
if (array.length == 0) {
out.writeArrayB(0, this, componentEncoder, array);
out.writeArrayE();
return;
}
if (this.componentEncoder == null) { if (this.componentEncoder == null) {
if (!this.inited) { if (!this.inited) {
lock.lock(); lock.lock();
@@ -84,16 +69,34 @@ public class StreamEncoder<W extends Writer, T> implements Encodeable<W, Stream<
} }
} }
} }
if (out.writeArrayB(array.length, this, componentEncoder, array) < 0) { }
boolean first = true;
for (Object v : array) { @Override
if (!first) { public void convertTo(W out, Stream<T> value) {
out.writeArrayMark(); convertTo(out, null, value);
} }
writeMemberValue(out, member, v, first);
if (first) { public void convertTo(W out, EnMember member, Stream<T> value) {
first = false; this.checkInited();
} if (value == null) {
out.writeNull();
return;
}
Object[] array = value.toArray();
if (array.length == 0) {
out.writeArrayB(0, componentEncoder, array);
out.writeArrayE();
return;
}
out.writeArrayB(array.length, componentEncoder, array);
boolean first = true;
for (Object v : array) {
if (!first) {
out.writeArrayMark();
}
writeMemberValue(out, member, v, first);
if (first) {
first = false;
} }
} }
out.writeArrayE(); out.writeArrayE();

View File

@@ -109,17 +109,6 @@ public abstract class Writer {
*/ */
public abstract void writeClassName(String clazz); public abstract void writeClassName(String clazz);
/**
* 输出一个对象前的操作 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj);
*
* @param obj 写入的对象
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/
public int writeObjectB(Object obj) {
this.comma = false;
return -1;
}
/** /**
* 输出一个为null的对象 * 输出一个为null的对象
* *
@@ -221,6 +210,15 @@ public abstract class Writer {
this.writeFieldName(member, attr.field(), attr.genericType(), member.getPosition()); this.writeFieldName(member, attr.field(), attr.genericType(), member.getPosition());
} }
/**
* 输出一个对象前的操作 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj);
*
* @param obj 写入的对象
*/
public void writeObjectB(Object obj) {
this.comma = false;
}
/** /**
* 输出一个对象后的操作 * 输出一个对象后的操作
* *
@@ -232,12 +230,10 @@ public abstract class Writer {
* 输出一个数组前的操作 * 输出一个数组前的操作
* *
* @param size 数组长度 * @param size 数组长度
* @param arrayEncoder Encodeable 可能是ArrayEncoder、CollectionEncoder或StreamEncoder
* @param componentEncoder Encodeable * @param componentEncoder Encodeable
* @param obj 对象, 不一定是数组、Collection对象也可能是伪Collection对象 * @param obj 对象, 不一定是数组、Collection对象也可能是伪Collection对象
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/ */
public abstract int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj); public abstract void writeArrayB(int size, Encodeable componentEncoder, Object obj);
/** 输出数组元素间的间隔符 */ /** 输出数组元素间的间隔符 */
public abstract void writeArrayMark(); public abstract void writeArrayMark();
@@ -252,9 +248,8 @@ public abstract class Writer {
* @param keyEncoder Encodeable * @param keyEncoder Encodeable
* @param valueEncoder Encodeable * @param valueEncoder Encodeable
* @param obj 对象, 不一定是Map对象也可能是伪Map对象 * @param obj 对象, 不一定是Map对象也可能是伪Map对象
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/ */
public abstract int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj); public abstract void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj);
/** 输出一个Map中key与value间的间隔符 */ /** 输出一个Map中key与value间的间隔符 */
public abstract void writeMapMark(); public abstract void writeMapMark();

View File

@@ -179,7 +179,7 @@ public class BsonWriter extends Writer implements ByteTuple {
writeNull(); writeNull();
return; return;
} }
writeArrayB(values.length, null, null, values); writeArrayB(values.length, null, values);
boolean flag = false; boolean flag = false;
for (byte v : values) { for (byte v : values) {
if (flag) { if (flag) {
@@ -240,11 +240,10 @@ public class BsonWriter extends Writer implements ByteTuple {
} }
@Override @Override
public final int writeObjectB(Object obj) { public final void writeObjectB(Object obj) {
super.writeObjectB(obj); super.writeObjectB(obj);
writeSmallString(""); writeSmallString("");
writeShort(BsonReader.SIGN_OBJECTB); writeShort(BsonReader.SIGN_OBJECTB);
return -1;
} }
@Override @Override
@@ -311,12 +310,11 @@ public class BsonWriter extends Writer implements ByteTuple {
} }
@Override @Override
public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) { public final void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
writeInt(size); writeInt(size);
if (componentEncoder != null && componentEncoder != ByteSimpledCoder.instance) { if (componentEncoder != null && componentEncoder != ByteSimpledCoder.instance) {
writeByte(BsonFactory.typeEnum(componentEncoder.getType())); writeByte(BsonFactory.typeEnum(componentEncoder.getType()));
} }
return -1;
} }
@Override @Override
@@ -330,11 +328,10 @@ public class BsonWriter extends Writer implements ByteTuple {
} }
@Override @Override
public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
writeInt(size); writeInt(size);
writeByte(BsonFactory.typeEnum(keyEncoder.getType())); writeByte(BsonFactory.typeEnum(keyEncoder.getType()));
writeByte(BsonFactory.typeEnum(valueEncoder.getType())); writeByte(BsonFactory.typeEnum(valueEncoder.getType()));
return -1;
} }
@Override @Override

View File

@@ -26,15 +26,14 @@ public final class BoolArraySimpledCoder<R extends Reader, W extends Writer> ext
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, BoolSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, BoolSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (boolean v : values) { for (boolean v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeBoolean(v);
flag = true;
} }
out.writeBoolean(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -27,15 +27,14 @@ public final class ByteBufferSimpledCoder<R extends Reader, W extends Writer> ex
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(value.remaining(), this, ByteSimpledCoder.instance, value) < 0) { out.writeArrayB(value.remaining(), ByteSimpledCoder.instance, value);
boolean flag = false; boolean flag = false;
for (byte v : value.array()) { for (byte v : value.array()) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeByte(v);
flag = true;
} }
out.writeByte(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -26,15 +26,14 @@ public final class CharArraySimpledCoder<R extends Reader, W extends Writer> ext
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, CharSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, CharSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (char v : values) { for (char v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeChar(v);
flag = true;
} }
out.writeChar(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -27,15 +27,14 @@ public final class DoubleArraySimpledCoder<R extends Reader, W extends Writer> e
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, DoubleSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, DoubleSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (double v : values) { for (double v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeDouble(v);
flag = true;
} }
out.writeDouble(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -26,15 +26,14 @@ public final class FloatArraySimpledCoder<R extends Reader, W extends Writer> ex
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, FloatSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, FloatSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (float v : values) { for (float v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeFloat(v);
flag = true;
} }
out.writeFloat(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -27,15 +27,14 @@ public final class IntArraySimpledCoder<R extends Reader, W extends Writer> exte
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, IntSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, IntSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (int v : values) { for (int v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeInt(v);
flag = true;
} }
out.writeInt(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -27,15 +27,14 @@ public final class LongArraySimpledCoder<R extends Reader, W extends Writer> ext
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, LongSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, LongSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (long v : values) { for (long v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeLong(v);
flag = true;
} }
out.writeLong(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -26,15 +26,14 @@ public final class ShortArraySimpledCoder<R extends Reader, W extends Writer> ex
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, ShortSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, ShortSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (short v : values) { for (short v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeShort(v);
flag = true;
} }
out.writeShort(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -26,15 +26,14 @@ public final class StringArraySimpledCoder<R extends Reader, W extends Writer> e
out.writeNull(); out.writeNull();
return; return;
} }
if (out.writeArrayB(values.length, this, StringSimpledCoder.instance, values) < 0) { out.writeArrayB(values.length, StringSimpledCoder.instance, values);
boolean flag = false; boolean flag = false;
for (String v : values) { for (String v : values) {
if (flag) { if (flag) {
out.writeArrayMark(); out.writeArrayMark();
}
out.writeString(v);
flag = true;
} }
out.writeString(v);
flag = true;
} }
out.writeArrayE(); out.writeArrayE();
} }

View File

@@ -183,7 +183,7 @@ public abstract class JsonWriter extends Writer {
writeNull(); writeNull();
return; return;
} }
writeArrayB(values.length, null, null, values); writeArrayB(values.length, null, values);
boolean flag = false; boolean flag = false;
for (byte v : values) { for (byte v : values) {
if (flag) { if (flag) {
@@ -224,10 +224,9 @@ public abstract class JsonWriter extends Writer {
public final void writeClassName(String clazz) {} public final void writeClassName(String clazz) {}
@Override @Override
public final int writeObjectB(Object obj) { public final void writeObjectB(Object obj) {
super.writeObjectB(obj); super.writeObjectB(obj);
writeTo(BYTE_LBRACE); writeTo(BYTE_LBRACE);
return -1;
} }
@Override @Override
@@ -241,9 +240,8 @@ public abstract class JsonWriter extends Writer {
} }
@Override @Override
public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) { public final void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
writeTo(BYTE_LBRACKET); writeTo(BYTE_LBRACKET);
return -1;
} }
@Override @Override
@@ -257,9 +255,8 @@ public abstract class JsonWriter extends Writer {
} }
@Override @Override
public final int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { public final void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
writeTo(BYTE_LBRACE); writeTo(BYTE_LBRACE);
return -1;
} }
@Override @Override

View File

@@ -9,29 +9,21 @@ import java.lang.reflect.Type;
import org.redkale.convert.*; import org.redkale.convert.*;
/** /**
* 非基本类型数组序列化。 注意: 基础类型不能使用此类
* @author zhangjx * @author zhangjx
* @param <T> T * @param <T> T
*/ */
public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T> { public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T> {
protected final boolean simple;
public ProtobufArrayEncoder(ProtobufFactory factory, Type type) { public ProtobufArrayEncoder(ProtobufFactory factory, Type type) {
super(factory, type); super(factory, type);
this.simple = ProtobufFactory.isNoLenBytesType(getComponentType());
} }
@Override @Override
protected void writeMemberValue(ProtobufWriter out, EnMember member, Encodeable encoder, Object item, int index) { protected void writeMemberValue(ProtobufWriter out, EnMember member, Encodeable encoder, Object item, int index) {
if (simple) { if (member != null) {
if (item == null) { out.writeFieldName(member);
out.writeUInt32(0);
} else {
componentEncoder.convertTo(out, item);
}
return;
} }
if (member != null) out.writeFieldName(member);
if (item == null) { if (item == null) {
out.writeUInt32(0); out.writeUInt32(0);
} else if (item instanceof CharSequence) { } else if (item instanceof CharSequence) {

View File

@@ -14,24 +14,15 @@ import org.redkale.convert.*;
*/ */
public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWriter, T> { public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWriter, T> {
protected final boolean simple;
public ProtobufCollectionEncoder(ProtobufFactory factory, Type type) { public ProtobufCollectionEncoder(ProtobufFactory factory, Type type) {
super(factory, type); super(factory, type);
this.simple = ProtobufFactory.isNoLenBytesType(getComponentType());
} }
@Override @Override
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) { protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
if (simple) { if (member != null) {
if (item == null) { out.writeFieldName(member);
out.writeUInt32(0);
} else {
componentEncoder.convertTo(out, item);
}
return;
} }
if (member != null) out.writeFieldName(member);
if (item == null) { if (item == null) {
out.writeUInt32(0); out.writeUInt32(0);
} else if (item instanceof CharSequence) { } else if (item instanceof CharSequence) {

View File

@@ -4,25 +4,15 @@
*/ */
package org.redkale.convert.pb; package org.redkale.convert.pb;
import java.lang.reflect.Field; import java.lang.reflect.*;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.HashMap; import java.util.*;
import java.util.Map; import java.util.concurrent.atomic.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import org.redkale.asm.Asms;
import org.redkale.asm.ClassWriter;
import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES; import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES;
import org.redkale.asm.FieldVisitor; import org.redkale.asm.*;
import org.redkale.asm.Label;
import org.redkale.asm.MethodVisitor;
import org.redkale.asm.Opcodes;
import static org.redkale.asm.Opcodes.*; import static org.redkale.asm.Opcodes.*;
import org.redkale.convert.*; import org.redkale.convert.*;
import org.redkale.util.AnyValue; import org.redkale.util.*;
import org.redkale.util.RedkaleClassLoader;
import org.redkale.util.RedkaleException;
import org.redkale.util.Utility;
/** /**
* 简单对象的PROTOBUF序列化操作类 * 简单对象的PROTOBUF序列化操作类
@@ -179,8 +169,7 @@ public abstract class ProtobufDynEncoder<T> extends ProtobufObjectEncoder<T> {
mv.visitVarInsn(ALOAD, 3); mv.visitVarInsn(ALOAD, 3);
mv.visitVarInsn(ALOAD, 2); mv.visitVarInsn(ALOAD, 2);
mv.visitMethodInsn(INVOKEVIRTUAL, pbwriterName, "writeObjectB", "(Ljava/lang/Object;)I", false); mv.visitMethodInsn(INVOKEVIRTUAL, pbwriterName, "writeObjectB", "(Ljava/lang/Object;)V", false);
mv.visitInsn(POP);
for (EnMember member : selfObjEncoder.getMembers()) { for (EnMember member : selfObjEncoder.getMembers()) {
final String fieldName = member.getAttribute().field(); final String fieldName = member.getAttribute().field();

View File

@@ -14,27 +14,18 @@ import org.redkale.convert.*;
*/ */
public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T> { public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T> {
protected final boolean simple;
public ProtobufStreamEncoder(ConvertFactory factory, Type type) { public ProtobufStreamEncoder(ConvertFactory factory, Type type) {
super(factory, type); super(factory, type);
this.simple = ProtobufFactory.isNoLenBytesType(getComponentType());
} }
@Override @Override
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) { protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
if (simple) {
if (item == null) {
out.writeUInt32(0);
} else {
componentEncoder.convertTo(out, item);
}
return;
}
if (member != null) { if (member != null) {
out.writeFieldName(member); out.writeFieldName(member);
} }
if (item instanceof CharSequence) { if (item == null) {
out.writeUInt32(0);
} else if (item instanceof CharSequence) {
componentEncoder.convertTo(out, item); componentEncoder.convertTo(out, item);
} else { } else {
ProtobufWriter tmp = out.pollChild(); ProtobufWriter tmp = out.pollChild();

View File

@@ -279,9 +279,9 @@ public class ProtobufWriter extends Writer implements ByteTuple {
} }
@Override @Override
public int writeObjectB(Object obj) { @ClassDepends
super.writeObjectB(obj); public void writeObjectB(Object obj) {
return -1; // do nothing
} }
@Override @Override
@@ -293,8 +293,8 @@ public class ProtobufWriter extends Writer implements ByteTuple {
} }
@Override @Override
public int writeArrayB(int size, Encodeable encoder, Encodeable componentEncoder, Object obj) { public void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
return -1; // do nothing
} }
@Override @Override
@@ -308,8 +308,8 @@ public class ProtobufWriter extends Writer implements ByteTuple {
} }
@Override @Override
public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) { public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
return -1; // do nothing
} }
@Override @Override
@@ -329,21 +329,7 @@ public class ProtobufWriter extends Writer implements ByteTuple {
@Override @Override
public final void writeByteArray(byte[] values) { public final void writeByteArray(byte[] values) {
if (values == null) { writeBytes(values);
writeNull();
return;
}
if (writeArrayB(values.length, null, null, values) < 0) {
boolean flag = false;
for (byte v : values) {
if (flag) {
writeArrayMark();
}
writeByte(v);
flag = true;
}
}
writeArrayE();
} }
@Override @Override