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; package org.redkale.convert;
import static org.redkale.convert.Reader.ValueType.MAP;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.*; import java.util.*;
import org.redkale.convert.Reader.ValueType; import org.redkale.convert.Reader.ValueType;
import static org.redkale.convert.Reader.ValueType.MAP;
import org.redkale.util.*; import org.redkale.util.*;
/** /**
@@ -18,8 +17,9 @@ import org.redkale.util.*;
* 详情见: https://redkale.org * 详情见: https://redkale.org
* *
* @author zhangjx * @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(); 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 * <p>详情见: https://redkale.org
* *
* @author zhangjx * @author zhangjx
* @param <W> Writer
* @param <T> 序列化的泛型类型 * @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; final ConvertFactory factory;
@@ -25,7 +26,7 @@ public final class AnyEncoder<T> implements Encodeable<Writer, T> {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void convertTo(final Writer out, final T value) { public void convertTo(final W out, final T value) {
if (value == null) { if (value == null) {
out.writeClassName(null); out.writeClassName(null);
out.writeNull(); out.writeNull();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -311,8 +311,7 @@ public class BsonWriter extends Writer implements ByteTuple {
} }
@Override @Override
public final int writeArrayB( public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) {
int size, Encodeable arrayEncoder, Encodeable<Writer, Object> 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()));
@@ -331,8 +330,7 @@ public class BsonWriter extends Writer implements ByteTuple {
} }
@Override @Override
public int writeMapB( public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
int size, Encodeable<Writer, Object> keyEncoder, Encodeable<Writer, Object> 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()));

View File

@@ -18,14 +18,14 @@ import org.redkale.convert.*;
* @author zhangjx * @author zhangjx
* @param <T> 反解析的数组元素类型 * @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); super(factory, type);
} }
@Override @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) { if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]); return BsonFactory.typeEnum(typevals[0]);
} }

View File

@@ -17,14 +17,14 @@ import org.redkale.convert.*;
* @author zhangjx * @author zhangjx
* @param <T> 反解析的集合元素类型 * @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) { public SkipCollectionDecoder(final ConvertFactory factory, final Type type) {
super(factory, type); super(factory, type);
} }
@Override @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) { if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]); return BsonFactory.typeEnum(typevals[0]);
} }

View File

@@ -17,14 +17,14 @@ import org.redkale.convert.*;
* @param <K> Map key的数据类型 * @param <K> Map key的数据类型
* @param <V> Map value的数据类型 * @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); super(factory, type);
} }
@Override @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) { if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]); return BsonFactory.typeEnum(typevals[0]);
} }
@@ -32,7 +32,7 @@ public class SkipMapDecoder<K, V> extends MapDecoder<K, V> {
} }
@Override @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) { if (typevals != null) {
return BsonFactory.typeEnum(typevals[1]); return BsonFactory.typeEnum(typevals[1]);
} }

View File

@@ -17,14 +17,14 @@ import org.redkale.convert.*;
* @author zhangjx * @author zhangjx
* @param <T> 反解析的集合元素类型 * @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); super(factory, type);
} }
@Override @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) { if (typevals != null) {
return BsonFactory.typeEnum(typevals[0]); return BsonFactory.typeEnum(typevals[0]);
} }

View File

@@ -17,7 +17,7 @@ import org.redkale.util.*;
* @author zhangjx * @author zhangjx
* @since 2.8.0 * @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(); private static final Type arrayType = new TypeToken<Collection<JsonElement>>() {}.getType();

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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