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
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;
}
protected void checkInited() {
if (this.componentDecoder == null) {
if (!this.inited) {
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 List<T> result = new ArrayList();
boolean first = true;

View File

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

View File

@@ -76,22 +76,7 @@ public class CollectionDecoder<R extends Reader, T> implements TagDecodeable<R,
this.inited = true;
}
@Override
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;
}
protected void checkInited() {
if (this.componentDecoder == null) {
if (!this.inited) {
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 Collection<T> result = this.creator.create();
boolean first = true;

View File

@@ -56,21 +56,7 @@ public class CollectionEncoder<W extends Writer, T> implements Encodeable<W, Col
}
}
@Override
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;
}
protected void checkInited() {
if (this.componentEncoder == null) {
if (!this.inited) {
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) {
if (!first) {
out.writeArrayMark();
}
writeMemberValue(out, member, v, first);
if (first) {
first = false;
}
}
@Override
public void convertTo(W out, Collection<T> value) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, Collection<T> value) {
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();

View File

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

View File

@@ -66,18 +66,7 @@ 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) {
final Map<K, V> values = value;
if (values == null) {
out.writeNull();
return;
}
protected void checkInited() {
if (this.keyEncoder == null || this.valueEncoder == null) {
if (!this.inited) {
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;
BiFunction<K, V, V> mapFieldFunc = (BiFunction) out.mapFieldFunc;
if (out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value) < 0) {
boolean first = true;
for (Map.Entry<K, V> en : values.entrySet()) {
if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) {
continue;
}
V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue());
if (!first) {
out.writeArrayMark();
}
writeMemberValue(out, member, en.getKey(), v, first);
if (first) {
first = false;
}
out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value);
boolean first = true;
for (Map.Entry<K, V> en : values.entrySet()) {
if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) {
continue;
}
V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue());
if (!first) {
out.writeArrayMark();
}
writeMemberValue(out, member, en.getKey(), v, first);
if (first) {
first = false;
}
}
out.writeMapE();

View File

@@ -7,8 +7,7 @@ package org.redkale.convert;
import java.lang.reflect.*;
import java.util.*;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.*;
import org.redkale.annotation.Nullable;
import org.redkale.convert.ext.StringSimpledCoder;
import org.redkale.util.*;
@@ -338,22 +337,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
this.memberInfo = DeMemberInfo.create(deMembers);
}
/**
* 对象格式: [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);
}
protected void checkInited() {
if (!this.inited) {
lock.lock();
try {
@@ -364,6 +348,25 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
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 (typeClass.isInterface() || Modifier.isAbstract(typeClass.getModifiers())) {
throw new ConvertException(

View File

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

View File

@@ -56,22 +56,7 @@ public class StreamEncoder<W extends Writer, T> implements Encodeable<W, Stream<
}
}
@Override
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;
}
protected void checkInited() {
if (this.componentEncoder == null) {
if (!this.inited) {
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) {
if (!first) {
out.writeArrayMark();
}
writeMemberValue(out, member, v, first);
if (first) {
first = false;
}
}
@Override
public void convertTo(W out, Stream<T> value) {
convertTo(out, null, value);
}
public void convertTo(W out, EnMember member, Stream<T> value) {
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();

View File

@@ -109,17 +109,6 @@ public abstract class Writer {
*/
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的对象
*
@@ -221,6 +210,15 @@ public abstract class Writer {
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 arrayEncoder Encodeable 可能是ArrayEncoder、CollectionEncoder或StreamEncoder
* @param componentEncoder Encodeable
* @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();
@@ -252,9 +248,8 @@ public abstract class Writer {
* @param keyEncoder Encodeable
* @param valueEncoder Encodeable
* @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间的间隔符 */
public abstract void writeMapMark();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -183,7 +183,7 @@ public abstract class JsonWriter extends Writer {
writeNull();
return;
}
writeArrayB(values.length, null, null, values);
writeArrayB(values.length, null, values);
boolean flag = false;
for (byte v : values) {
if (flag) {
@@ -224,10 +224,9 @@ public abstract class JsonWriter extends Writer {
public final void writeClassName(String clazz) {}
@Override
public final int writeObjectB(Object obj) {
public final void writeObjectB(Object obj) {
super.writeObjectB(obj);
writeTo(BYTE_LBRACE);
return -1;
}
@Override
@@ -241,9 +240,8 @@ public abstract class JsonWriter extends Writer {
}
@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);
return -1;
}
@Override
@@ -257,9 +255,8 @@ public abstract class JsonWriter extends Writer {
}
@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);
return -1;
}
@Override

View File

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

View File

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

View File

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

View File

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

View File

@@ -279,9 +279,9 @@ public class ProtobufWriter extends Writer implements ByteTuple {
}
@Override
public int writeObjectB(Object obj) {
super.writeObjectB(obj);
return -1;
@ClassDepends
public void writeObjectB(Object obj) {
// do nothing
}
@Override
@@ -293,8 +293,8 @@ public class ProtobufWriter extends Writer implements ByteTuple {
}
@Override
public int writeArrayB(int size, Encodeable encoder, Encodeable componentEncoder, Object obj) {
return -1;
public void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
// do nothing
}
@Override
@@ -308,8 +308,8 @@ public class ProtobufWriter extends Writer implements ByteTuple {
}
@Override
public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
return -1;
public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
// do nothing
}
@Override
@@ -329,21 +329,7 @@ public class ProtobufWriter extends Writer implements ByteTuple {
@Override
public final void writeByteArray(byte[] values) {
if (values == null) {
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();
writeBytes(values);
}
@Override