protobuf
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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()));
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user