This commit is contained in:
redkale
2024-09-19 08:59:58 +08:00
parent a79c4303aa
commit 3646e0ab15
30 changed files with 166 additions and 183 deletions

View File

@@ -5,11 +5,10 @@
*/
package org.redkale.convert;
import static org.redkale.convert.Reader.ValueType.MAP;
import java.lang.reflect.Type;
import java.util.*;
import org.redkale.convert.Reader.ValueType;
import static org.redkale.convert.Reader.ValueType.MAP;
import org.redkale.util.*;
/**
@@ -18,8 +17,9 @@ import org.redkale.util.*;
* 详情见: https://redkale.org
*
* @author zhangjx
* @param <R> Reader
*/
public class AnyDecoder<T> implements Decodeable<Reader, T> {
public class AnyDecoder<R extends Reader, T> implements Decodeable<R, T> {
private static final Type collectionObjectType = new TypeToken<Collection<Object>>() {}.getType();

View File

@@ -13,9 +13,10 @@ import java.lang.reflect.Type;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <W> Writer
* @param <T> 序列化的泛型类型
*/
public final class AnyEncoder<T> implements Encodeable<Writer, T> {
public final class AnyEncoder<W extends Writer, T> implements Encodeable<W, T> {
final ConvertFactory factory;
@@ -25,7 +26,7 @@ public final class AnyEncoder<T> implements Encodeable<Writer, T> {
@Override
@SuppressWarnings("unchecked")
public void convertTo(final Writer out, final T value) {
public void convertTo(final W out, final T value) {
if (value == null) {
out.writeClassName(null);
out.writeNull();

View File

@@ -19,10 +19,11 @@ import org.redkale.util.Creator;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <R> Reader
* @param <T> 反解析的数组元素类型
*/
@SuppressWarnings("unchecked")
public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
public class ArrayDecoder<R extends Reader, T> implements Decodeable<R, T[]> {
protected final Type type;
@@ -30,7 +31,7 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
protected final Class componentClass;
protected final Decodeable<Reader, T> componentDecoder;
protected final Decodeable<R, T> componentDecoder;
protected final IntFunction<T[]> componentArrayFunction;
@@ -71,11 +72,11 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
}
@Override
public T[] convertFrom(Reader in) {
public T[] convertFrom(R in) {
return convertFrom(in, null);
}
public T[] convertFrom(Reader in, DeMember member) {
public T[] convertFrom(R in, DeMember member) {
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, componentDecoder);
int contentLength = -1;
@@ -98,13 +99,13 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
}
}
}
final Decodeable<Reader, T> localdecoder = getComponentDecoder(this.componentDecoder, typevals);
final Decodeable<R, T> localdecoder = getComponentDecoder(this.componentDecoder, typevals);
final List<T> result = new ArrayList();
boolean first = true;
if (len == Reader.SIGN_NOLENGTH) {
int startPosition = in.position();
while (hasNext(in, member, startPosition, contentLength, first)) {
Reader itemReader = getItemReader(in, member, first);
R itemReader = getItemReader(in, member, first);
if (itemReader == null) {
break;
}
@@ -121,19 +122,19 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
return result.toArray(rs);
}
protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) {
protected boolean hasNext(R in, DeMember member, int startPosition, int contentLength, boolean first) {
return in.hasNext(startPosition, contentLength);
}
protected Decodeable<Reader, T> getComponentDecoder(Decodeable<Reader, T> decoder, byte[] typevals) {
protected Decodeable<R, T> getComponentDecoder(Decodeable<R, T> decoder, byte[] typevals) {
return decoder;
}
protected Reader getItemReader(Reader in, DeMember member, boolean first) {
protected R getItemReader(R in, DeMember member, boolean first) {
return in;
}
protected T readMemberValue(Reader in, DeMember member, Decodeable<Reader, T> decoder, boolean first) {
protected T readMemberValue(R in, DeMember member, Decodeable<R, T> decoder, boolean first) {
if (in == null) {
return null;
}
@@ -155,7 +156,7 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
return componentType;
}
public Decodeable<Reader, T> getComponentDecoder() {
public Decodeable<R, T> getComponentDecoder() {
return componentDecoder;
}
}

View File

@@ -16,10 +16,11 @@ import java.util.concurrent.locks.*;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <W> Writer
* @param <T> 序列化的数组元素类型
*/
@SuppressWarnings("unchecked")
public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
public class ArrayEncoder<W extends Writer, T> implements Encodeable<W, T[]> {
protected final Type type;
@@ -27,7 +28,7 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
protected final Encodeable anyEncoder;
protected final Encodeable<Writer, Object> componentEncoder;
protected final Encodeable<W, Object> componentEncoder;
protected final boolean subTypeFinal;
@@ -69,11 +70,11 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
}
@Override
public void convertTo(Writer out, T[] value) {
public void convertTo(W out, T[] value) {
convertTo(out, null, value);
}
public void convertTo(Writer out, EnMember member, T[] value) {
public void convertTo(W out, EnMember member, T[] value) {
if (value == null) {
out.writeNull();
return;
@@ -84,7 +85,7 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
out.writeArrayE();
return;
}
Encodeable<Writer, Object> itemEncoder = this.componentEncoder;
Encodeable<W, Object> itemEncoder = this.componentEncoder;
if (itemEncoder == null) {
if (!this.inited) {
lock.lock();
@@ -131,8 +132,7 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
out.writeArrayE();
}
protected void writeMemberValue(
Writer out, EnMember member, Encodeable<Writer, Object> encoder, Object value, int index) {
protected void writeMemberValue(W out, EnMember member, Encodeable<W, Object> encoder, Object value, int index) {
encoder.convertTo(out, value);
}
@@ -156,7 +156,7 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
return componentType;
}
public Encodeable<Writer, Object> getComponentEncoder() {
public Encodeable<W, Object> getComponentEncoder() {
return componentEncoder;
}
}

View File

@@ -17,10 +17,11 @@ import org.redkale.util.Creator;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <R> Reader
* @param <T> 反解析的集合元素类型
*/
@SuppressWarnings("unchecked")
public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
public class CollectionDecoder<R extends Reader, T> implements Decodeable<R, Collection<T>> {
protected final Type type;
@@ -28,7 +29,7 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
protected Creator<Collection<T>> creator;
protected final Decodeable<Reader, T> componentDecoder;
protected final Decodeable<R, T> componentDecoder;
protected volatile boolean inited = false;
@@ -66,10 +67,7 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
// 仅供类似JsonAnyDecoder这种动态创建使用 不得调用 factory.register
public CollectionDecoder(
Type type,
Type componentType,
Creator<Collection<T>> creator,
final Decodeable<Reader, T> componentDecoder) {
Type type, Type componentType, Creator<Collection<T>> creator, final Decodeable<R, T> componentDecoder) {
Objects.requireNonNull(componentDecoder);
this.type = type;
this.componentType = componentType;
@@ -79,11 +77,11 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
}
@Override
public Collection<T> convertFrom(Reader in) {
public Collection<T> convertFrom(R in) {
return convertFrom(in, null);
}
public Collection<T> convertFrom(Reader in, DeMember member) {
public Collection<T> convertFrom(R in, DeMember member) {
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, componentDecoder);
int contentLength = -1;
@@ -106,13 +104,13 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
}
}
}
final Decodeable<Reader, T> localdecoder = getComponentDecoder(this.componentDecoder, typevals);
final Decodeable<R, T> localdecoder = getComponentDecoder(this.componentDecoder, typevals);
final Collection<T> result = this.creator.create();
boolean first = true;
if (len == Reader.SIGN_NOLENGTH) {
int startPosition = in.position();
while (hasNext(in, member, startPosition, contentLength, first)) {
Reader itemReader = getItemReader(in, member, first);
R itemReader = getItemReader(in, member, first);
if (itemReader == null) {
break;
}
@@ -128,19 +126,19 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
return result;
}
protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) {
protected boolean hasNext(R in, DeMember member, int startPosition, int contentLength, boolean first) {
return in.hasNext(startPosition, contentLength);
}
protected Decodeable<Reader, T> getComponentDecoder(Decodeable<Reader, T> decoder, byte[] typevals) {
protected Decodeable<R, T> getComponentDecoder(Decodeable<R, T> decoder, byte[] typevals) {
return decoder;
}
protected Reader getItemReader(Reader in, DeMember member, boolean first) {
protected R getItemReader(R in, DeMember member, boolean first) {
return in;
}
protected T readMemberValue(Reader in, DeMember member, Decodeable<Reader, T> decoder, boolean first) {
protected T readMemberValue(R in, DeMember member, Decodeable<R, T> decoder, boolean first) {
if (in == null) {
return null;
}
@@ -156,7 +154,7 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
return componentType;
}
public Decodeable<Reader, T> getComponentDecoder() {
public Decodeable<R, T> getComponentDecoder() {
return componentDecoder;
}
}

View File

@@ -16,14 +16,15 @@ import java.util.concurrent.locks.*;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <W> Writer
* @param <T> 序列化的集合元素类型
*/
@SuppressWarnings("unchecked")
public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
public class CollectionEncoder<W extends Writer, T> implements Encodeable<W, Collection<T>> {
protected final Type type;
protected final Encodeable<Writer, Object> componentEncoder;
protected final Encodeable<W, Object> componentEncoder;
protected volatile boolean inited = false;
@@ -56,11 +57,11 @@ public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
}
@Override
public void convertTo(Writer out, Collection<T> value) {
public void convertTo(W out, Collection<T> value) {
convertTo(out, null, value);
}
public void convertTo(Writer out, EnMember member, Collection<T> value) {
public void convertTo(W out, EnMember member, Collection<T> value) {
if (value == null) {
out.writeNull();
return;
@@ -97,7 +98,7 @@ public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
out.writeArrayE();
}
protected void writeMemberValue(Writer out, EnMember member, Object value, boolean first) {
protected void writeMemberValue(W out, EnMember member, Object value, boolean first) {
componentEncoder.convertTo(out, value);
}
@@ -117,7 +118,7 @@ public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
+ "}";
}
public Encodeable<Writer, Object> getComponentEncoder() {
public Encodeable<W, Object> getComponentEncoder() {
return componentEncoder;
}

View File

@@ -16,11 +16,12 @@ import org.redkale.util.Creator;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <R> Reader
* @param <K> Map key的数据类型
* @param <V> Map value的数据类型
*/
@SuppressWarnings("unchecked")
public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
public class MapDecoder<R extends Reader, K, V> implements Decodeable<R, Map<K, V>> {
protected final Type type;
@@ -30,9 +31,9 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
protected Creator<Map<K, V>> creator;
protected final Decodeable<Reader, K> keyDecoder;
protected final Decodeable<R, K> keyDecoder;
protected final Decodeable<Reader, V> valueDecoder;
protected final Decodeable<R, V> valueDecoder;
protected volatile boolean inited = false;
@@ -84,8 +85,8 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
Type keyType,
Type valueType,
Creator<Map<K, V>> creator,
final Decodeable<Reader, K> keyDecoder,
Decodeable<Reader, V> valueDecoder) {
final Decodeable<R, K> keyDecoder,
Decodeable<R, V> valueDecoder) {
Objects.requireNonNull(keyDecoder);
Objects.requireNonNull(valueDecoder);
this.type = type;
@@ -98,11 +99,11 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
}
@Override
public Map<K, V> convertFrom(Reader in) {
public Map<K, V> convertFrom(R in) {
return convertFrom(in, null);
}
public Map<K, V> convertFrom(Reader in, DeMember member) {
public Map<K, V> convertFrom(R in, DeMember member) {
if (this.keyDecoder == null || this.valueDecoder == null) {
if (!this.inited) {
lock.lock();
@@ -127,12 +128,12 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
}
final Map<K, V> result = this.creator.create();
boolean first = true;
Decodeable<Reader, K> kdecoder = getKeyDecoder(this.keyDecoder, typevals);
Decodeable<Reader, V> vdecoder = getValueDecoder(this.valueDecoder, typevals);
Decodeable<R, K> kdecoder = getKeyDecoder(this.keyDecoder, typevals);
Decodeable<R, V> vdecoder = getValueDecoder(this.valueDecoder, typevals);
if (len == Reader.SIGN_NOLENGTH) {
int startPosition = in.position();
while (hasNext(in, member, startPosition, contentLength, first)) {
Reader entryReader = getEntryReader(in, member, first);
R entryReader = getEntryReader(in, member, first);
if (entryReader == null) {
break;
}
@@ -155,27 +156,27 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
return result;
}
protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) {
protected boolean hasNext(R in, DeMember member, int startPosition, int contentLength, boolean first) {
return in.hasNext(startPosition, contentLength);
}
protected Decodeable<Reader, K> getKeyDecoder(Decodeable<Reader, K> decoder, byte[] typevals) {
protected Decodeable<R, K> getKeyDecoder(Decodeable<R, K> decoder, byte[] typevals) {
return decoder;
}
protected Decodeable<Reader, V> getValueDecoder(Decodeable<Reader, V> decoder, byte[] typevals) {
protected Decodeable<R, V> getValueDecoder(Decodeable<R, V> decoder, byte[] typevals) {
return decoder;
}
protected Reader getEntryReader(Reader in, DeMember member, boolean first) {
protected R getEntryReader(R in, DeMember member, boolean first) {
return in;
}
protected K readKeyMember(Reader in, DeMember member, Decodeable<Reader, K> decoder, boolean first) {
protected K readKeyMember(R in, DeMember member, Decodeable<R, K> decoder, boolean first) {
return decoder.convertFrom(in);
}
protected V readValueMember(Reader in, DeMember member, Decodeable<Reader, V> decoder, boolean first) {
protected V readValueMember(R in, DeMember member, Decodeable<R, V> decoder, boolean first) {
return decoder.convertFrom(in);
}
@@ -192,11 +193,11 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
return valueType;
}
public Decodeable<Reader, K> getKeyDecoder() {
public Decodeable<R, K> getKeyDecoder() {
return keyDecoder;
}
public Decodeable<Reader, V> getValueDecoder() {
public Decodeable<R, V> getValueDecoder() {
return valueDecoder;
}
}

View File

@@ -16,17 +16,18 @@ import java.util.function.BiFunction;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <W> Writer
* @param <K> Map key的数据类型
* @param <V> Map value的数据类型
*/
@SuppressWarnings("unchecked")
public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
public class MapEncoder<W extends Writer, K, V> implements Encodeable<W, Map<K, V>> {
protected final Type type;
protected final Encodeable<Writer, K> keyEncoder;
protected final Encodeable<W, K> keyEncoder;
protected final Encodeable<Writer, V> valueEncoder;
protected final Encodeable<W, V> valueEncoder;
protected volatile boolean inited = false;
@@ -66,11 +67,11 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
}
@Override
public void convertTo(Writer out, Map<K, V> value) {
public void convertTo(W out, Map<K, V> value) {
convertTo(out, null, value);
}
public void convertTo(Writer out, EnMember member, Map<K, V> value) {
public void convertTo(W out, EnMember member, Map<K, V> value) {
final Map<K, V> values = value;
if (values == null) {
out.writeNull();
@@ -110,7 +111,7 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
out.writeMapE();
}
protected void writeMemberValue(Writer out, EnMember member, K key, V value, boolean first) {
protected void writeMemberValue(W out, EnMember member, K key, V value, boolean first) {
keyEncoder.convertTo(out, key);
out.writeMapMark();
valueEncoder.convertTo(out, value);
@@ -134,11 +135,11 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
return valueEncoder == null ? null : valueEncoder.getType();
}
public Encodeable<Writer, K> getKeyEncoder() {
public Encodeable<W, K> getKeyEncoder() {
return keyEncoder;
}
public Encodeable<Writer, V> getValueEncoder() {
public Encodeable<W, V> getValueEncoder() {
return valueEncoder;
}
}

View File

@@ -17,16 +17,17 @@ import java.util.stream.Stream;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <R> Reader
* @param <T> 反解析的集合元素类型
*/
@SuppressWarnings("unchecked")
public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
public class StreamDecoder<R extends Reader, T> implements Decodeable<R, Stream<T>> {
protected final Type type;
protected final Type componentType;
protected final Decodeable<Reader, T> componentDecoder;
protected final Decodeable<R, T> componentDecoder;
protected volatile boolean inited = false;
@@ -57,11 +58,11 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
}
@Override
public Stream<T> convertFrom(Reader in) {
public Stream<T> convertFrom(R in) {
return convertFrom(in, null);
}
public Stream<T> convertFrom(Reader in, DeMember member) {
public Stream<T> convertFrom(R in, DeMember member) {
byte[] typevals = new byte[1];
int len = in.readArrayB(member, typevals, this.componentDecoder);
int contentLength = -1;
@@ -84,13 +85,13 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
}
}
}
final Decodeable<Reader, T> localdecoder = getComponentDecoder(this.componentDecoder, typevals);
final Decodeable<R, T> localdecoder = getComponentDecoder(this.componentDecoder, typevals);
final List<T> result = new ArrayList();
boolean first = true;
if (len == Reader.SIGN_NOLENGTH) {
int startPosition = in.position();
while (hasNext(in, member, startPosition, contentLength, first)) {
Reader itemReader = getItemReader(in, member, first);
R itemReader = getItemReader(in, member, first);
if (itemReader == null) {
break;
}
@@ -106,19 +107,19 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
return result.stream();
}
protected boolean hasNext(Reader in, DeMember member, int startPosition, int contentLength, boolean first) {
protected boolean hasNext(R in, DeMember member, int startPosition, int contentLength, boolean first) {
return in.hasNext(startPosition, contentLength);
}
protected Decodeable<Reader, T> getComponentDecoder(Decodeable<Reader, T> decoder, byte[] typevals) {
protected Decodeable<R, T> getComponentDecoder(Decodeable<R, T> decoder, byte[] typevals) {
return decoder;
}
protected Reader getItemReader(Reader in, DeMember member, boolean first) {
protected R getItemReader(R in, DeMember member, boolean first) {
return in;
}
protected T readMemberValue(Reader in, DeMember member, Decodeable<Reader, T> decoder, boolean first) {
protected T readMemberValue(R in, DeMember member, Decodeable<R, T> decoder, boolean first) {
return decoder.convertFrom(in);
}
@@ -131,7 +132,7 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
return componentType;
}
public Decodeable<Reader, T> getComponentDecoder() {
public Decodeable<R, T> getComponentDecoder() {
return componentDecoder;
}
}

View File

@@ -16,10 +16,11 @@ import java.util.stream.Stream;
* <p>详情见: https://redkale.org
*
* @author zhangjx
* @param <W> Writer
* @param <T> 序列化的集合元素类型
*/
@SuppressWarnings("unchecked")
public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
public class StreamEncoder<W extends Writer, T> implements Encodeable<W, Stream<T>> {
protected final Type type;
@@ -56,11 +57,11 @@ public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
}
@Override
public void convertTo(Writer out, Stream<T> value) {
public void convertTo(W out, Stream<T> value) {
convertTo(out, null, value);
}
public void convertTo(Writer out, EnMember member, Stream<T> value) {
public void convertTo(W out, EnMember member, Stream<T> value) {
if (value == null) {
out.writeNull();
return;
@@ -98,7 +99,7 @@ public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
out.writeArrayE();
}
protected void writeMemberValue(Writer out, EnMember member, Object value, boolean first) {
protected void writeMemberValue(W out, EnMember member, Object value, boolean first) {
componentEncoder.convertTo(out, value);
}

View File

@@ -237,8 +237,7 @@ public abstract class Writer {
* @param obj 对象, 不一定是数组、Collection对象也可能是伪Collection对象
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/
public abstract int writeArrayB(
int size, Encodeable arrayEncoder, Encodeable<Writer, Object> componentEncoder, Object obj);
public abstract int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj);
/** 输出数组元素间的间隔符 */
public abstract void writeArrayMark();
@@ -255,8 +254,7 @@ public abstract class Writer {
* @param obj 对象, 不一定是Map对象也可能是伪Map对象
* @return 返回-1表示还没有写入对象内容大于-1表示已写入对象内容返回对象内容大小
*/
public abstract int writeMapB(
int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj);
public abstract int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj);
/** 输出一个Map中key与value间的间隔符 */
public abstract void writeMapMark();

View File

@@ -311,8 +311,7 @@ public class BsonWriter extends Writer implements ByteTuple {
}
@Override
public final int writeArrayB(
int size, Encodeable arrayEncoder, Encodeable<Writer, Object> componentEncoder, Object obj) {
public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) {
writeInt(size);
if (componentEncoder != null && componentEncoder != ByteSimpledCoder.instance) {
writeByte(BsonFactory.typeEnum(componentEncoder.getType()));
@@ -331,8 +330,7 @@ public class BsonWriter extends Writer implements ByteTuple {
}
@Override
public int writeMapB(
int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
writeInt(size);
writeByte(BsonFactory.typeEnum(keyEncoder.getType()));
writeByte(BsonFactory.typeEnum(valueEncoder.getType()));

View File

@@ -18,14 +18,14 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> 反解析的数组元素类型
*/
public class SkipArrayDecoder<T> extends ArrayDecoder<T> {
public class SkipArrayDecoder<T> extends ArrayDecoder<BsonReader, T> {
public SkipArrayDecoder(final ConvertFactory factory, final Type type) {
public SkipArrayDecoder(final BsonFactory factory, final Type type) {
super(factory, type);
}
@Override
protected Decodeable<Reader, T> getComponentDecoder(Decodeable<Reader, T> decoder, byte[] typevals) {
protected Decodeable<BsonReader, T> getComponentDecoder(Decodeable<BsonReader, T> decoder, byte[] typevals) {
if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]);
}

View File

@@ -17,14 +17,14 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> 反解析的集合元素类型
*/
public class SkipCollectionDecoder<T> extends CollectionDecoder<T> {
public class SkipCollectionDecoder<T> extends CollectionDecoder<BsonReader, T> {
public SkipCollectionDecoder(final ConvertFactory factory, final Type type) {
super(factory, type);
}
@Override
protected Decodeable<Reader, T> getComponentDecoder(Decodeable<Reader, T> decoder, byte[] typevals) {
protected Decodeable<BsonReader, T> getComponentDecoder(Decodeable<BsonReader, T> decoder, byte[] typevals) {
if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]);
}

View File

@@ -17,14 +17,14 @@ import org.redkale.convert.*;
* @param <K> Map key的数据类型
* @param <V> Map value的数据类型
*/
public class SkipMapDecoder<K, V> extends MapDecoder<K, V> {
public class SkipMapDecoder<K, V> extends MapDecoder<BsonReader, K, V> {
public SkipMapDecoder(final ConvertFactory factory, final Type type) {
public SkipMapDecoder(final BsonFactory factory, final Type type) {
super(factory, type);
}
@Override
protected Decodeable<Reader, K> getKeyDecoder(Decodeable<Reader, K> decoder, byte[] typevals) {
protected Decodeable<BsonReader, K> getKeyDecoder(Decodeable<BsonReader, K> decoder, byte[] typevals) {
if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]);
}
@@ -32,7 +32,7 @@ public class SkipMapDecoder<K, V> extends MapDecoder<K, V> {
}
@Override
protected Decodeable<Reader, V> getValueDecoder(Decodeable<Reader, V> decoder, byte[] typevals) {
protected Decodeable<BsonReader, V> getValueDecoder(Decodeable<BsonReader, V> decoder, byte[] typevals) {
if (typevals != null) {
return BsonFactory.typeEnum(typevals[1]);
}

View File

@@ -17,14 +17,14 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> 反解析的集合元素类型
*/
public class SkipStreamDecoder<T> extends StreamDecoder<T> {
public class SkipStreamDecoder<T> extends StreamDecoder<BsonReader, T> {
public SkipStreamDecoder(final ConvertFactory factory, final Type type) {
public SkipStreamDecoder(final BsonFactory factory, final Type type) {
super(factory, type);
}
@Override
protected Decodeable<Reader, T> getComponentDecoder(Decodeable<Reader, T> decoder, byte[] typevals) {
protected Decodeable<BsonReader, T> getComponentDecoder(Decodeable<BsonReader, T> decoder, byte[] typevals) {
if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]);
}

View File

@@ -17,7 +17,7 @@ import org.redkale.util.*;
* @author zhangjx
* @since 2.8.0
*/
class JsonElementDecoder extends AnyDecoder<JsonElement> {
class JsonElementDecoder extends AnyDecoder<JsonReader, JsonElement> {
private static final Type arrayType = new TypeToken<Collection<JsonElement>>() {}.getType();

View File

@@ -241,8 +241,7 @@ public abstract class JsonWriter extends Writer {
}
@Override
public final int writeArrayB(
int size, Encodeable arrayEncoder, Encodeable<Writer, Object> componentEncoder, Object obj) {
public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) {
writeTo(BYTE_LBRACKET);
return -1;
}
@@ -258,8 +257,7 @@ public abstract class JsonWriter extends Writer {
}
@Override
public final int writeMapB(
int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
public final int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
writeTo(BYTE_LBRACE);
return -1;
}

View File

@@ -13,7 +13,7 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> T
*/
public class ProtobufArrayDecoder<T> extends ArrayDecoder<T> {
public class ProtobufArrayDecoder<T> extends ArrayDecoder<ProtobufReader, T> {
protected final boolean simple;
@@ -21,9 +21,9 @@ public class ProtobufArrayDecoder<T> extends ArrayDecoder<T> {
private final boolean enumtostring;
public ProtobufArrayDecoder(ConvertFactory factory, Type type) {
public ProtobufArrayDecoder(ProtobufFactory factory, Type type) {
super(factory, type);
this.enumtostring = ((ProtobufFactory) factory).enumtostring;
this.enumtostring = factory.enumtostring;
Type comtype = this.getComponentType();
this.string = String.class == comtype;
this.simple = Boolean.class == comtype
@@ -38,7 +38,7 @@ public class ProtobufArrayDecoder<T> extends ArrayDecoder<T> {
}
@Override
protected Reader getItemReader(Reader in, DeMember member, boolean first) {
protected ProtobufReader getItemReader(ProtobufReader in, DeMember member, boolean first) {
if (simple) return in;
return ProtobufFactory.getItemReader(string, simple, in, member, enumtostring, first);
}

View File

@@ -13,11 +13,11 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> T
*/
public class ProtobufArrayEncoder<T> extends ArrayEncoder<T> {
public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T> {
protected final boolean simple;
public ProtobufArrayEncoder(ConvertFactory factory, Type type) {
public ProtobufArrayEncoder(ProtobufFactory factory, Type type) {
super(factory, type);
Type comtype = this.getComponentType();
this.simple = Boolean.class == comtype
@@ -32,11 +32,10 @@ public class ProtobufArrayEncoder<T> extends ArrayEncoder<T> {
}
@Override
protected void writeMemberValue(
Writer out, EnMember member, Encodeable<Writer, Object> encoder, Object item, int index) {
protected void writeMemberValue(ProtobufWriter out, EnMember member, Encodeable encoder, Object item, int index) {
if (simple) {
if (item == null) {
((ProtobufWriter) out).writeUInt32(0);
out.writeUInt32(0);
} else {
componentEncoder.convertTo(out, item);
}
@@ -44,15 +43,14 @@ public class ProtobufArrayEncoder<T> extends ArrayEncoder<T> {
}
if (member != null) out.writeFieldName(member);
if (item == null) {
((ProtobufWriter) out).writeUInt32(0);
out.writeUInt32(0);
} else if (item instanceof CharSequence) {
encoder.convertTo(out, item);
} else {
ProtobufWriter tmp = new ProtobufWriter().configFieldFunc(out);
encoder.convertTo(tmp, item);
int length = tmp.count();
((ProtobufWriter) out).writeUInt32(length);
((ProtobufWriter) out).writeTo(tmp.toArray());
out.writeLength(tmp.count());
out.writeTo(tmp.toArray());
}
}
}

View File

@@ -13,7 +13,7 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> T
*/
public class ProtobufCollectionDecoder<T> extends CollectionDecoder<T> {
public class ProtobufCollectionDecoder<T> extends CollectionDecoder<ProtobufReader, T> {
protected final boolean simple;
@@ -21,9 +21,9 @@ public class ProtobufCollectionDecoder<T> extends CollectionDecoder<T> {
private final boolean enumtostring;
public ProtobufCollectionDecoder(ConvertFactory factory, Type type) {
public ProtobufCollectionDecoder(ProtobufFactory factory, Type type) {
super(factory, type);
this.enumtostring = ((ProtobufFactory) factory).enumtostring;
this.enumtostring = factory.enumtostring;
Type comtype = this.getComponentType();
this.string = String.class == comtype;
this.simple = Boolean.class == comtype
@@ -38,7 +38,7 @@ public class ProtobufCollectionDecoder<T> extends CollectionDecoder<T> {
}
@Override
protected Reader getItemReader(Reader in, DeMember member, boolean first) {
protected ProtobufReader getItemReader(ProtobufReader in, DeMember member, boolean first) {
if (simple) return in;
return ProtobufFactory.getItemReader(string, simple, in, member, enumtostring, first);
}

View File

@@ -13,11 +13,11 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> T
*/
public class ProtobufCollectionEncoder<T> extends CollectionEncoder<T> {
public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWriter, T> {
protected final boolean simple;
public ProtobufCollectionEncoder(ConvertFactory factory, Type type) {
public ProtobufCollectionEncoder(ProtobufFactory factory, Type type) {
super(factory, type);
Type comtype = this.getComponentType();
this.simple = Boolean.class == comtype
@@ -32,7 +32,7 @@ public class ProtobufCollectionEncoder<T> extends CollectionEncoder<T> {
}
@Override
protected void writeMemberValue(Writer out, EnMember member, Object item, boolean first) {
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
if (simple) {
if (item == null) {
((ProtobufWriter) out).writeUInt32(0);
@@ -43,15 +43,14 @@ public class ProtobufCollectionEncoder<T> extends CollectionEncoder<T> {
}
if (member != null) out.writeFieldName(member);
if (item == null) {
((ProtobufWriter) out).writeUInt32(0);
out.writeUInt32(0);
} else if (item instanceof CharSequence) {
componentEncoder.convertTo(out, item);
} else {
ProtobufWriter tmp = new ProtobufWriter().configFieldFunc(out);
componentEncoder.convertTo(tmp, item);
int length = tmp.count();
((ProtobufWriter) out).writeUInt32(length);
((ProtobufWriter) out).writeTo(tmp.toArray());
out.writeLength(tmp.count());
out.writeTo(tmp.toArray());
}
}
}

View File

@@ -184,8 +184,8 @@ public class ProtobufFactory extends ConvertFactory<ProtobufReader, ProtobufWrit
return true;
}
protected static Reader getItemReader(
boolean string, boolean simple, Reader in, DeMember member, boolean enumtostring, boolean first) {
protected static ProtobufReader getItemReader(
boolean string, boolean simple, ProtobufReader in, DeMember member, boolean enumtostring, boolean first) {
if (string) {
if (member == null || first) {
return in;

View File

@@ -13,7 +13,7 @@ import org.redkale.convert.*;
* @param <K> K
* @param <V> V
*/
public class ProtobufMapDecoder<K, V> extends MapDecoder<K, V> {
public class ProtobufMapDecoder<K, V> extends MapDecoder<ProtobufReader, K, V> {
protected final boolean enumtostring;
@@ -23,30 +23,29 @@ public class ProtobufMapDecoder<K, V> extends MapDecoder<K, V> {
}
@Override
protected Reader getEntryReader(Reader in, DeMember member, boolean first) {
ProtobufReader reader = (ProtobufReader) in;
protected ProtobufReader getEntryReader(ProtobufReader in, DeMember member, boolean first) {
if (!first && member != null) {
int tag = reader.readTag();
int tag = in.readTag();
if (tag != member.getTag()) {
reader.backTag(tag);
in.backTag(tag);
return null;
}
}
byte[] bs = reader.readByteArray();
byte[] bs = in.readByteArray();
return new ProtobufReader(bs);
}
@Override
protected K readKeyMember(Reader in, DeMember member, Decodeable<Reader, K> decoder, boolean first) {
ProtobufReader reader = (ProtobufReader) in;
reader.readTag();
protected K readKeyMember(
ProtobufReader in, DeMember member, Decodeable<ProtobufReader, K> decoder, boolean first) {
in.readTag();
return decoder.convertFrom(in);
}
@Override
protected V readValueMember(Reader in, DeMember member, Decodeable<Reader, V> decoder, boolean first) {
ProtobufReader reader = (ProtobufReader) in;
reader.readTag();
protected V readValueMember(
ProtobufReader in, DeMember member, Decodeable<ProtobufReader, V> decoder, boolean first) {
in.readTag();
return decoder.convertFrom(in);
}
}

View File

@@ -13,7 +13,7 @@ import org.redkale.convert.*;
* @param <K> K
* @param <V> V
*/
public class ProtobufMapEncoder<K, V> extends MapEncoder<K, V> {
public class ProtobufMapEncoder<K, V> extends MapEncoder<ProtobufWriter, K, V> {
private final boolean enumtostring;
@@ -23,15 +23,14 @@ public class ProtobufMapEncoder<K, V> extends MapEncoder<K, V> {
}
@Override
protected void writeMemberValue(Writer out, EnMember member, K key, V value, boolean first) {
protected void writeMemberValue(ProtobufWriter out, EnMember member, K key, V value, boolean first) {
ProtobufWriter tmp = new ProtobufWriter().configFieldFunc(out);
if (member != null) out.writeFieldName(member);
tmp.writeUInt32(1 << 3 | ProtobufFactory.wireType(keyEncoder.getType(), enumtostring));
keyEncoder.convertTo(tmp, key);
tmp.writeUInt32(2 << 3 | ProtobufFactory.wireType(valueEncoder.getType(), enumtostring));
valueEncoder.convertTo(tmp, value);
int length = tmp.count();
((ProtobufWriter) out).writeUInt32(length);
((ProtobufWriter) out).writeTo(tmp.toArray());
out.writeLength(tmp.count());
out.writeTo(tmp.toArray());
}
}

View File

@@ -27,13 +27,8 @@ public class ProtobufObjectDecoder<T> extends ObjectDecoder<ProtobufReader, T> {
+ ConvertColumn.class.getSimpleName() + ".index");
}
Attribute attr = member.getAttribute();
setTag(
member,
ProtobufFactory.getTag(
attr.field(),
attr.genericType(),
member.getPosition(),
((ProtobufFactory) factory).enumtostring));
boolean enumtostring = ((ProtobufFactory) factory).enumtostring;
setTag(member, ProtobufFactory.getTag(attr.field(), attr.genericType(), member.getPosition(), enumtostring));
}
@Override

View File

@@ -27,13 +27,8 @@ public class ProtobufObjectEncoder<T> extends ObjectEncoder<ProtobufWriter, T> {
+ ConvertColumn.class.getSimpleName() + ".index");
}
Attribute attr = member.getAttribute();
setTag(
member,
ProtobufFactory.getTag(
attr.field(),
attr.genericType(),
member.getPosition(),
((ProtobufFactory) factory).enumtostring));
boolean enumtostring = ((ProtobufFactory) factory).enumtostring;
setTag(member, ProtobufFactory.getTag(attr.field(), attr.genericType(), member.getPosition(), enumtostring));
}
@Override

View File

@@ -13,7 +13,7 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> 泛型
*/
public class ProtobufStreamDecoder<T> extends StreamDecoder<T> {
public class ProtobufStreamDecoder<T> extends StreamDecoder<ProtobufReader, T> {
protected final boolean simple;
@@ -38,7 +38,7 @@ public class ProtobufStreamDecoder<T> extends StreamDecoder<T> {
}
@Override
protected Reader getItemReader(Reader in, DeMember member, boolean first) {
protected ProtobufReader getItemReader(ProtobufReader in, DeMember member, boolean first) {
if (simple) return in;
return ProtobufFactory.getItemReader(string, simple, in, member, enumtostring, first);
}

View File

@@ -13,7 +13,7 @@ import org.redkale.convert.*;
* @author zhangjx
* @param <T> T
*/
public class ProtobufStreamEncoder<T> extends StreamEncoder<T> {
public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T> {
protected final boolean simple;
@@ -32,24 +32,25 @@ public class ProtobufStreamEncoder<T> extends StreamEncoder<T> {
}
@Override
protected void writeMemberValue(Writer out, EnMember member, Object item, boolean first) {
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
if (simple) {
if (item == null) {
((ProtobufWriter) out).writeUInt32(0);
out.writeUInt32(0);
} else {
componentEncoder.convertTo(out, item);
}
return;
}
if (member != null) out.writeFieldName(member);
if (member != null) {
out.writeFieldName(member);
}
if (item instanceof CharSequence) {
componentEncoder.convertTo(out, item);
} else {
ProtobufWriter tmp = new ProtobufWriter().configFieldFunc(out);
componentEncoder.convertTo(tmp, item);
int length = tmp.count();
((ProtobufWriter) out).writeUInt32(length);
((ProtobufWriter) out).writeTo(tmp.toArray());
out.writeUInt32(tmp.count());
out.writeTo(tmp.toArray());
}
}
}

View File

@@ -54,11 +54,10 @@ public class ProtobufWriter extends Writer implements ByteTuple {
return this;
}
protected ProtobufWriter configFieldFunc(Writer writer) {
if (writer == null) {
protected ProtobufWriter configFieldFunc(ProtobufWriter out) {
if (out == null) {
return this;
}
ProtobufWriter out = (ProtobufWriter) writer;
this.mapFieldFunc = out.mapFieldFunc;
this.objFieldFunc = out.objFieldFunc;
this.objExtFunc = out.objExtFunc;
@@ -223,7 +222,7 @@ public class ProtobufWriter extends Writer implements ByteTuple {
}
@Override
public int writeArrayB(int size, Encodeable encoder, Encodeable<Writer, Object> componentEncoder, Object obj) {
public int writeArrayB(int size, Encodeable encoder, Encodeable componentEncoder, Object obj) {
if (obj == null) {
writeNull();
return 0;
@@ -387,8 +386,7 @@ public class ProtobufWriter extends Writer implements ByteTuple {
}
@Override
public int writeMapB(
int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> valueEncoder, Object obj) {
public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
return -1;
}