convert
This commit is contained in:
@@ -71,22 +71,7 @@ public class ArrayDecoder<R extends Reader, T> implements TagDecodeable<R, T[]>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public T[] convertFrom(R in) {
|
|
||||||
return convertFrom(in, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public T[] convertFrom(R in, DeMember member) {
|
|
||||||
byte[] typevals = new byte[1];
|
|
||||||
int len = in.readArrayB(member, typevals, componentDecoder);
|
|
||||||
int contentLength = -1;
|
|
||||||
if (len == Reader.SIGN_NULL) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (len == Reader.SIGN_NOLENBUTBYTES) {
|
|
||||||
contentLength = in.readMemberContentLength(member, componentDecoder);
|
|
||||||
len = Reader.SIGN_NOLENGTH;
|
|
||||||
}
|
|
||||||
if (this.componentDecoder == null) {
|
if (this.componentDecoder == null) {
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@@ -99,6 +84,25 @@ public class ArrayDecoder<R extends Reader, T> implements TagDecodeable<R, T[]>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T[] convertFrom(R in) {
|
||||||
|
return convertFrom(in, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T[] convertFrom(R in, DeMember member) {
|
||||||
|
this.checkInited();
|
||||||
|
byte[] typevals = new byte[1];
|
||||||
|
int len = in.readArrayB(member, typevals, componentDecoder);
|
||||||
|
int contentLength = -1;
|
||||||
|
if (len == Reader.SIGN_NULL) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (len == Reader.SIGN_NOLENBUTBYTES) {
|
||||||
|
contentLength = in.readMemberContentLength(member, componentDecoder);
|
||||||
|
len = Reader.SIGN_NOLENGTH;
|
||||||
|
}
|
||||||
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
|
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
|
||||||
final List<T> result = new ArrayList();
|
final List<T> result = new ArrayList();
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
|
|||||||
@@ -69,24 +69,8 @@ public class ArrayEncoder<W extends Writer, T> implements Encodeable<W, T[]> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public void convertTo(W out, T[] value) {
|
if (this.componentEncoder == null) {
|
||||||
convertTo(out, null, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void convertTo(W out, EnMember member, T[] value) {
|
|
||||||
if (value == null) {
|
|
||||||
out.writeNull();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
int iMax = value.length - 1;
|
|
||||||
if (iMax == -1) {
|
|
||||||
out.writeArrayB(0, this, componentEncoder, value);
|
|
||||||
out.writeArrayE();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Encodeable<W, Object> itemEncoder = this.componentEncoder;
|
|
||||||
if (itemEncoder == null) {
|
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
try {
|
try {
|
||||||
@@ -96,37 +80,54 @@ public class ArrayEncoder<W extends Writer, T> implements Encodeable<W, T[]> {
|
|||||||
} finally {
|
} finally {
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
itemEncoder = this.componentEncoder;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void convertTo(W out, T[] value) {
|
||||||
|
convertTo(out, null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void convertTo(W out, EnMember member, T[] value) {
|
||||||
|
this.checkInited();
|
||||||
|
if (value == null) {
|
||||||
|
out.writeNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int iMax = value.length - 1;
|
||||||
|
if (iMax == -1) {
|
||||||
|
out.writeArrayB(0, componentEncoder, value);
|
||||||
|
out.writeArrayE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Encodeable<W, Object> itemEncoder = this.componentEncoder;
|
||||||
if (subTypeFinal) {
|
if (subTypeFinal) {
|
||||||
if (out.writeArrayB(value.length, this, itemEncoder, value) < 0) {
|
out.writeArrayB(value.length, itemEncoder, value);
|
||||||
for (int i = 0; ; i++) {
|
for (int i = 0; ; i++) {
|
||||||
writeMemberValue(out, member, itemEncoder, value[i], i);
|
writeMemberValue(out, member, itemEncoder, value[i], i);
|
||||||
if (i == iMax) {
|
if (i == iMax) {
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
out.writeArrayMark();
|
|
||||||
}
|
}
|
||||||
|
out.writeArrayMark();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (out.writeArrayB(value.length, this, itemEncoder, value) < 0) {
|
out.writeArrayB(value.length, itemEncoder, value);
|
||||||
final Type comp = this.componentType;
|
final Type comp = this.componentType;
|
||||||
for (int i = 0; ; i++) {
|
for (int i = 0; ; i++) {
|
||||||
Object v = value[i];
|
Object v = value[i];
|
||||||
writeMemberValue(
|
writeMemberValue(
|
||||||
out,
|
out,
|
||||||
member,
|
member,
|
||||||
((v != null && (v.getClass() == comp || out.specificObjectType() == comp))
|
((v != null && (v.getClass() == comp || out.specificObjectType() == comp))
|
||||||
? itemEncoder
|
? itemEncoder
|
||||||
: anyEncoder),
|
: anyEncoder),
|
||||||
v,
|
v,
|
||||||
i);
|
i);
|
||||||
if (i == iMax) {
|
if (i == iMax) {
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
out.writeArrayMark();
|
|
||||||
}
|
}
|
||||||
|
out.writeArrayMark();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
|
|||||||
@@ -76,22 +76,7 @@ public class CollectionDecoder<R extends Reader, T> implements TagDecodeable<R,
|
|||||||
this.inited = true;
|
this.inited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public Collection<T> convertFrom(R in) {
|
|
||||||
return convertFrom(in, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<T> convertFrom(R in, DeMember member) {
|
|
||||||
byte[] typevals = new byte[1];
|
|
||||||
int len = in.readArrayB(member, typevals, componentDecoder);
|
|
||||||
int contentLength = -1;
|
|
||||||
if (len == Reader.SIGN_NULL) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (len == Reader.SIGN_NOLENBUTBYTES) {
|
|
||||||
contentLength = in.readMemberContentLength(member, componentDecoder);
|
|
||||||
len = Reader.SIGN_NOLENGTH;
|
|
||||||
}
|
|
||||||
if (this.componentDecoder == null) {
|
if (this.componentDecoder == null) {
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@@ -104,6 +89,25 @@ public class CollectionDecoder<R extends Reader, T> implements TagDecodeable<R,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Collection<T> convertFrom(R in) {
|
||||||
|
return convertFrom(in, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Collection<T> convertFrom(R in, DeMember member) {
|
||||||
|
this.checkInited();
|
||||||
|
byte[] typevals = new byte[1];
|
||||||
|
int len = in.readArrayB(member, typevals, componentDecoder);
|
||||||
|
int contentLength = -1;
|
||||||
|
if (len == Reader.SIGN_NULL) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (len == Reader.SIGN_NOLENBUTBYTES) {
|
||||||
|
contentLength = in.readMemberContentLength(member, componentDecoder);
|
||||||
|
len = Reader.SIGN_NOLENGTH;
|
||||||
|
}
|
||||||
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
|
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
|
||||||
final Collection<T> result = this.creator.create();
|
final Collection<T> result = this.creator.create();
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
|
|||||||
@@ -56,21 +56,7 @@ public class CollectionEncoder<W extends Writer, T> implements Encodeable<W, Col
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public void convertTo(W out, Collection<T> value) {
|
|
||||||
convertTo(out, null, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void convertTo(W out, EnMember member, Collection<T> value) {
|
|
||||||
if (value == null) {
|
|
||||||
out.writeNull();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (value.isEmpty()) {
|
|
||||||
out.writeArrayB(0, this, componentEncoder, value);
|
|
||||||
out.writeArrayE();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this.componentEncoder == null) {
|
if (this.componentEncoder == null) {
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@@ -83,16 +69,33 @@ public class CollectionEncoder<W extends Writer, T> implements Encodeable<W, Col
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(value.size(), this, componentEncoder, value) < 0) {
|
}
|
||||||
boolean first = true;
|
|
||||||
for (Object v : value) {
|
@Override
|
||||||
if (!first) {
|
public void convertTo(W out, Collection<T> value) {
|
||||||
out.writeArrayMark();
|
convertTo(out, null, value);
|
||||||
}
|
}
|
||||||
writeMemberValue(out, member, v, first);
|
|
||||||
if (first) {
|
public void convertTo(W out, EnMember member, Collection<T> value) {
|
||||||
first = false;
|
this.checkInited();
|
||||||
}
|
if (value == null) {
|
||||||
|
out.writeNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (value.isEmpty()) {
|
||||||
|
out.writeArrayB(0, componentEncoder, value);
|
||||||
|
out.writeArrayE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
out.writeArrayB(value.size(), componentEncoder, value);
|
||||||
|
boolean first = true;
|
||||||
|
for (Object v : value) {
|
||||||
|
if (!first) {
|
||||||
|
out.writeArrayMark();
|
||||||
|
}
|
||||||
|
writeMemberValue(out, member, v, first);
|
||||||
|
if (first) {
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
|
|||||||
@@ -98,12 +98,7 @@ public class MapDecoder<R extends Reader, K, V> implements TagDecodeable<R, Map<
|
|||||||
this.inited = true;
|
this.inited = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public Map<K, V> convertFrom(R in) {
|
|
||||||
return convertFrom(in, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<K, V> convertFrom(R in, DeMember member) {
|
|
||||||
if (this.keyDecoder == null || this.valueDecoder == null) {
|
if (this.keyDecoder == null || this.valueDecoder == null) {
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@@ -116,6 +111,16 @@ public class MapDecoder<R extends Reader, K, V> implements TagDecodeable<R, Map<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<K, V> convertFrom(R in) {
|
||||||
|
return convertFrom(in, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<K, V> convertFrom(R in, DeMember member) {
|
||||||
|
this.checkInited();
|
||||||
byte[] typevals = new byte[2];
|
byte[] typevals = new byte[2];
|
||||||
int len = in.readMapB(member, typevals, this.keyDecoder, this.valueDecoder);
|
int len = in.readMapB(member, typevals, this.keyDecoder, this.valueDecoder);
|
||||||
int contentLength = -1;
|
int contentLength = -1;
|
||||||
|
|||||||
@@ -66,18 +66,7 @@ public class MapEncoder<W extends Writer, K, V> implements Encodeable<W, Map<K,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public void convertTo(W out, Map<K, V> value) {
|
|
||||||
convertTo(out, null, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void convertTo(W out, EnMember member, Map<K, V> value) {
|
|
||||||
final Map<K, V> values = value;
|
|
||||||
if (values == null) {
|
|
||||||
out.writeNull();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.keyEncoder == null || this.valueEncoder == null) {
|
if (this.keyEncoder == null || this.valueEncoder == null) {
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@@ -90,22 +79,35 @@ public class MapEncoder<W extends Writer, K, V> implements Encodeable<W, Map<K,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void convertTo(W out, Map<K, V> value) {
|
||||||
|
convertTo(out, null, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void convertTo(W out, EnMember member, Map<K, V> value) {
|
||||||
|
this.checkInited();
|
||||||
|
final Map<K, V> values = value;
|
||||||
|
if (values == null) {
|
||||||
|
out.writeNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
Set<String> ignoreColumns = this.ignoreMapColumns;
|
Set<String> ignoreColumns = this.ignoreMapColumns;
|
||||||
BiFunction<K, V, V> mapFieldFunc = (BiFunction) out.mapFieldFunc;
|
BiFunction<K, V, V> mapFieldFunc = (BiFunction) out.mapFieldFunc;
|
||||||
if (out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value) < 0) {
|
out.writeMapB(values.size(), (Encodeable) keyEncoder, (Encodeable) valueEncoder, value);
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
for (Map.Entry<K, V> en : values.entrySet()) {
|
for (Map.Entry<K, V> en : values.entrySet()) {
|
||||||
if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) {
|
if (ignoreColumns != null && ignoreColumns.contains(en.getKey())) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue());
|
V v = mapFieldFunc == null ? en.getValue() : mapFieldFunc.apply(en.getKey(), en.getValue());
|
||||||
if (!first) {
|
if (!first) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
}
|
||||||
writeMemberValue(out, member, en.getKey(), v, first);
|
writeMemberValue(out, member, en.getKey(), v, first);
|
||||||
if (first) {
|
if (first) {
|
||||||
first = false;
|
first = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeMapE();
|
out.writeMapE();
|
||||||
|
|||||||
@@ -7,8 +7,7 @@ package org.redkale.convert;
|
|||||||
|
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.locks.Condition;
|
import java.util.concurrent.locks.*;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
|
||||||
import org.redkale.annotation.Nullable;
|
import org.redkale.annotation.Nullable;
|
||||||
import org.redkale.convert.ext.StringSimpledCoder;
|
import org.redkale.convert.ext.StringSimpledCoder;
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
@@ -338,22 +337,7 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
this.memberInfo = DeMemberInfo.create(deMembers);
|
this.memberInfo = DeMemberInfo.create(deMembers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected void checkInited() {
|
||||||
* 对象格式: [0x1][short字段个数][字段名][字段值]...[0x2]
|
|
||||||
*
|
|
||||||
* @param in 输入流
|
|
||||||
* @return 反解析后的对象结果
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public T convertFrom(final R in) {
|
|
||||||
R objin = objectReader(in);
|
|
||||||
final String clazz = objin.readObjectB(typeClass);
|
|
||||||
if (clazz == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (!clazz.isEmpty()) {
|
|
||||||
return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(objin);
|
|
||||||
}
|
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
try {
|
try {
|
||||||
@@ -364,6 +348,25 @@ public class ObjectDecoder<R extends Reader, T> implements Decodeable<R, T> {
|
|||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对象格式: [0x1][short字段个数][字段名][字段值]...[0x2]
|
||||||
|
*
|
||||||
|
* @param in 输入流
|
||||||
|
* @return 反解析后的对象结果
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public T convertFrom(final R in) {
|
||||||
|
this.checkInited();
|
||||||
|
R objin = objectReader(in);
|
||||||
|
final String clazz = objin.readObjectB(typeClass);
|
||||||
|
if (clazz == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!clazz.isEmpty()) {
|
||||||
|
return (T) factory.loadDecoder(factory.getEntityAlias(clazz)).convertFrom(objin);
|
||||||
|
}
|
||||||
if (this.creator == null) {
|
if (this.creator == null) {
|
||||||
if (typeClass.isInterface() || Modifier.isAbstract(typeClass.getModifiers())) {
|
if (typeClass.isInterface() || Modifier.isAbstract(typeClass.getModifiers())) {
|
||||||
throw new ConvertException(
|
throw new ConvertException(
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import java.lang.reflect.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.locks.*;
|
import java.util.concurrent.locks.*;
|
||||||
import org.redkale.annotation.ConstructorParameters;
|
import org.redkale.annotation.ConstructorParameters;
|
||||||
import org.redkale.annotation.Nullable;
|
import org.redkale.annotation.*;
|
||||||
import org.redkale.convert.ext.StringSimpledCoder;
|
import org.redkale.convert.ext.StringSimpledCoder;
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
|
|
||||||
@@ -309,12 +309,7 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
|
|||||||
this.members = enMembers;
|
this.members = enMembers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public void convertTo(W out, T value) {
|
|
||||||
if (value == null) {
|
|
||||||
out.writeObjectNull(null);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
try {
|
try {
|
||||||
@@ -325,6 +320,15 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
|
|||||||
lock.unlock();
|
lock.unlock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void convertTo(W out, T value) {
|
||||||
|
this.checkInited();
|
||||||
|
if (value == null) {
|
||||||
|
out.writeObjectNull(null);
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (value.getClass() != this.typeClass && !this.type.equals(out.specificObjectType())) {
|
if (value.getClass() != this.typeClass && !this.type.equals(out.specificObjectType())) {
|
||||||
final Class clz = value.getClass();
|
final Class clz = value.getClass();
|
||||||
if (out.needWriteClassName()) {
|
if (out.needWriteClassName()) {
|
||||||
@@ -334,28 +338,27 @@ public class ObjectEncoder<W extends Writer, T> implements Encodeable<W, T> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
W objout = objectWriter(out, value);
|
W objout = objectWriter(out, value);
|
||||||
if (objout.writeObjectB(value) < 0) {
|
objout.writeObjectB(value);
|
||||||
int maxPosition = 0;
|
int maxPosition = 0;
|
||||||
for (EnMember member : members) {
|
for (EnMember member : members) {
|
||||||
maxPosition = member.getPosition();
|
maxPosition = member.getPosition();
|
||||||
objout.writeObjectField(member, value);
|
objout.writeObjectField(member, value);
|
||||||
}
|
}
|
||||||
if (objout.objExtFunc != null) {
|
if (objout.objExtFunc != null) {
|
||||||
ConvertField[] extFields = objout.objExtFunc.apply(value);
|
ConvertField[] extFields = objout.objExtFunc.apply(value);
|
||||||
if (extFields != null) {
|
if (extFields != null) {
|
||||||
Encodeable<W, ?> anyEncoder = factory.getAnyEncoder();
|
Encodeable<W, ?> anyEncoder = factory.getAnyEncoder();
|
||||||
for (ConvertField en : extFields) {
|
for (ConvertField en : extFields) {
|
||||||
if (en == null) {
|
if (en == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
maxPosition++;
|
|
||||||
objout.writeObjectField(
|
|
||||||
en.getName(),
|
|
||||||
en.getType(),
|
|
||||||
Math.max(en.getPosition(), maxPosition),
|
|
||||||
anyEncoder,
|
|
||||||
en.getValue());
|
|
||||||
}
|
}
|
||||||
|
maxPosition++;
|
||||||
|
objout.writeObjectField(
|
||||||
|
en.getName(),
|
||||||
|
en.getType(),
|
||||||
|
Math.max(en.getPosition(), maxPosition),
|
||||||
|
anyEncoder,
|
||||||
|
en.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,22 +57,7 @@ public class StreamDecoder<R extends Reader, T> implements TagDecodeable<R, Stre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public Stream<T> convertFrom(R in) {
|
|
||||||
return convertFrom(in, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Stream<T> convertFrom(R in, DeMember member) {
|
|
||||||
byte[] typevals = new byte[1];
|
|
||||||
int len = in.readArrayB(member, typevals, this.componentDecoder);
|
|
||||||
int contentLength = -1;
|
|
||||||
if (len == Reader.SIGN_NULL) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (len == Reader.SIGN_NOLENBUTBYTES) {
|
|
||||||
contentLength = in.readMemberContentLength(member, this.componentDecoder);
|
|
||||||
len = Reader.SIGN_NOLENGTH;
|
|
||||||
}
|
|
||||||
if (this.componentDecoder == null) {
|
if (this.componentDecoder == null) {
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@@ -85,6 +70,25 @@ public class StreamDecoder<R extends Reader, T> implements TagDecodeable<R, Stre
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Stream<T> convertFrom(R in) {
|
||||||
|
return convertFrom(in, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Stream<T> convertFrom(R in, DeMember member) {
|
||||||
|
this.checkInited();
|
||||||
|
byte[] typevals = new byte[1];
|
||||||
|
int len = in.readArrayB(member, typevals, this.componentDecoder);
|
||||||
|
int contentLength = -1;
|
||||||
|
if (len == Reader.SIGN_NULL) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (len == Reader.SIGN_NOLENBUTBYTES) {
|
||||||
|
contentLength = in.readMemberContentLength(member, this.componentDecoder);
|
||||||
|
len = Reader.SIGN_NOLENGTH;
|
||||||
|
}
|
||||||
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
|
final Decodeable<R, T> localDecoder = getComponentDecoder(this.componentDecoder, typevals);
|
||||||
final List<T> result = new ArrayList();
|
final List<T> result = new ArrayList();
|
||||||
boolean first = true;
|
boolean first = true;
|
||||||
|
|||||||
@@ -56,22 +56,7 @@ public class StreamEncoder<W extends Writer, T> implements Encodeable<W, Stream<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
protected void checkInited() {
|
||||||
public void convertTo(W out, Stream<T> value) {
|
|
||||||
convertTo(out, null, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void convertTo(W out, EnMember member, Stream<T> value) {
|
|
||||||
if (value == null) {
|
|
||||||
out.writeNull();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Object[] array = value.toArray();
|
|
||||||
if (array.length == 0) {
|
|
||||||
out.writeArrayB(0, this, componentEncoder, array);
|
|
||||||
out.writeArrayE();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (this.componentEncoder == null) {
|
if (this.componentEncoder == null) {
|
||||||
if (!this.inited) {
|
if (!this.inited) {
|
||||||
lock.lock();
|
lock.lock();
|
||||||
@@ -84,16 +69,34 @@ public class StreamEncoder<W extends Writer, T> implements Encodeable<W, Stream<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(array.length, this, componentEncoder, array) < 0) {
|
}
|
||||||
boolean first = true;
|
|
||||||
for (Object v : array) {
|
@Override
|
||||||
if (!first) {
|
public void convertTo(W out, Stream<T> value) {
|
||||||
out.writeArrayMark();
|
convertTo(out, null, value);
|
||||||
}
|
}
|
||||||
writeMemberValue(out, member, v, first);
|
|
||||||
if (first) {
|
public void convertTo(W out, EnMember member, Stream<T> value) {
|
||||||
first = false;
|
this.checkInited();
|
||||||
}
|
if (value == null) {
|
||||||
|
out.writeNull();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Object[] array = value.toArray();
|
||||||
|
if (array.length == 0) {
|
||||||
|
out.writeArrayB(0, componentEncoder, array);
|
||||||
|
out.writeArrayE();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
out.writeArrayB(array.length, componentEncoder, array);
|
||||||
|
boolean first = true;
|
||||||
|
for (Object v : array) {
|
||||||
|
if (!first) {
|
||||||
|
out.writeArrayMark();
|
||||||
|
}
|
||||||
|
writeMemberValue(out, member, v, first);
|
||||||
|
if (first) {
|
||||||
|
first = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
|
|||||||
@@ -109,17 +109,6 @@ public abstract class Writer {
|
|||||||
*/
|
*/
|
||||||
public abstract void writeClassName(String clazz);
|
public abstract void writeClassName(String clazz);
|
||||||
|
|
||||||
/**
|
|
||||||
* 输出一个对象前的操作 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj);
|
|
||||||
*
|
|
||||||
* @param obj 写入的对象
|
|
||||||
* @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小
|
|
||||||
*/
|
|
||||||
public int writeObjectB(Object obj) {
|
|
||||||
this.comma = false;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 输出一个为null的对象
|
* 输出一个为null的对象
|
||||||
*
|
*
|
||||||
@@ -221,6 +210,15 @@ public abstract class Writer {
|
|||||||
this.writeFieldName(member, attr.field(), attr.genericType(), member.getPosition());
|
this.writeFieldName(member, attr.field(), attr.genericType(), member.getPosition());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 输出一个对象前的操作 注: 覆盖此方法必须要先调用父方法 super.writeObjectB(obj);
|
||||||
|
*
|
||||||
|
* @param obj 写入的对象
|
||||||
|
*/
|
||||||
|
public void writeObjectB(Object obj) {
|
||||||
|
this.comma = false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 输出一个对象后的操作
|
* 输出一个对象后的操作
|
||||||
*
|
*
|
||||||
@@ -232,12 +230,10 @@ public abstract class Writer {
|
|||||||
* 输出一个数组前的操作
|
* 输出一个数组前的操作
|
||||||
*
|
*
|
||||||
* @param size 数组长度
|
* @param size 数组长度
|
||||||
* @param arrayEncoder Encodeable 可能是ArrayEncoder、CollectionEncoder或StreamEncoder
|
|
||||||
* @param componentEncoder Encodeable
|
* @param componentEncoder Encodeable
|
||||||
* @param obj 对象, 不一定是数组、Collection对象,也可能是伪Collection对象
|
* @param obj 对象, 不一定是数组、Collection对象,也可能是伪Collection对象
|
||||||
* @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小
|
|
||||||
*/
|
*/
|
||||||
public abstract int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj);
|
public abstract void writeArrayB(int size, Encodeable componentEncoder, Object obj);
|
||||||
|
|
||||||
/** 输出数组元素间的间隔符 */
|
/** 输出数组元素间的间隔符 */
|
||||||
public abstract void writeArrayMark();
|
public abstract void writeArrayMark();
|
||||||
@@ -252,9 +248,8 @@ public abstract class Writer {
|
|||||||
* @param keyEncoder Encodeable
|
* @param keyEncoder Encodeable
|
||||||
* @param valueEncoder Encodeable
|
* @param valueEncoder Encodeable
|
||||||
* @param obj 对象, 不一定是Map对象,也可能是伪Map对象
|
* @param obj 对象, 不一定是Map对象,也可能是伪Map对象
|
||||||
* @return 返回-1表示还没有写入对象内容,大于-1表示已写入对象内容,返回对象内容大小
|
|
||||||
*/
|
*/
|
||||||
public abstract int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj);
|
public abstract void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj);
|
||||||
|
|
||||||
/** 输出一个Map中key与value间的间隔符 */
|
/** 输出一个Map中key与value间的间隔符 */
|
||||||
public abstract void writeMapMark();
|
public abstract void writeMapMark();
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ public class BsonWriter extends Writer implements ByteTuple {
|
|||||||
writeNull();
|
writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
writeArrayB(values.length, null, null, values);
|
writeArrayB(values.length, null, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (byte v : values) {
|
for (byte v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
@@ -240,11 +240,10 @@ public class BsonWriter extends Writer implements ByteTuple {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int writeObjectB(Object obj) {
|
public final void writeObjectB(Object obj) {
|
||||||
super.writeObjectB(obj);
|
super.writeObjectB(obj);
|
||||||
writeSmallString("");
|
writeSmallString("");
|
||||||
writeShort(BsonReader.SIGN_OBJECTB);
|
writeShort(BsonReader.SIGN_OBJECTB);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -311,12 +310,11 @@ public class BsonWriter extends Writer implements ByteTuple {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) {
|
public final void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
|
||||||
writeInt(size);
|
writeInt(size);
|
||||||
if (componentEncoder != null && componentEncoder != ByteSimpledCoder.instance) {
|
if (componentEncoder != null && componentEncoder != ByteSimpledCoder.instance) {
|
||||||
writeByte(BsonFactory.typeEnum(componentEncoder.getType()));
|
writeByte(BsonFactory.typeEnum(componentEncoder.getType()));
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -330,11 +328,10 @@ public class BsonWriter extends Writer implements ByteTuple {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
|
public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
|
||||||
writeInt(size);
|
writeInt(size);
|
||||||
writeByte(BsonFactory.typeEnum(keyEncoder.getType()));
|
writeByte(BsonFactory.typeEnum(keyEncoder.getType()));
|
||||||
writeByte(BsonFactory.typeEnum(valueEncoder.getType()));
|
writeByte(BsonFactory.typeEnum(valueEncoder.getType()));
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -26,15 +26,14 @@ public final class BoolArraySimpledCoder<R extends Reader, W extends Writer> ext
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, BoolSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, BoolSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (boolean v : values) {
|
for (boolean v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeBoolean(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeBoolean(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,15 +27,14 @@ public final class ByteBufferSimpledCoder<R extends Reader, W extends Writer> ex
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(value.remaining(), this, ByteSimpledCoder.instance, value) < 0) {
|
out.writeArrayB(value.remaining(), ByteSimpledCoder.instance, value);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (byte v : value.array()) {
|
for (byte v : value.array()) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeByte(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeByte(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,15 +26,14 @@ public final class CharArraySimpledCoder<R extends Reader, W extends Writer> ext
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, CharSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, CharSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (char v : values) {
|
for (char v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeChar(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeChar(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,15 +27,14 @@ public final class DoubleArraySimpledCoder<R extends Reader, W extends Writer> e
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, DoubleSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, DoubleSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (double v : values) {
|
for (double v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeDouble(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeDouble(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,15 +26,14 @@ public final class FloatArraySimpledCoder<R extends Reader, W extends Writer> ex
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, FloatSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, FloatSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (float v : values) {
|
for (float v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeFloat(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeFloat(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,15 +27,14 @@ public final class IntArraySimpledCoder<R extends Reader, W extends Writer> exte
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, IntSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, IntSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (int v : values) {
|
for (int v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeInt(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeInt(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,15 +27,14 @@ public final class LongArraySimpledCoder<R extends Reader, W extends Writer> ext
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, LongSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, LongSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (long v : values) {
|
for (long v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeLong(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeLong(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,15 +26,14 @@ public final class ShortArraySimpledCoder<R extends Reader, W extends Writer> ex
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, ShortSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, ShortSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (short v : values) {
|
for (short v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeShort(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeShort(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,15 +26,14 @@ public final class StringArraySimpledCoder<R extends Reader, W extends Writer> e
|
|||||||
out.writeNull();
|
out.writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (out.writeArrayB(values.length, this, StringSimpledCoder.instance, values) < 0) {
|
out.writeArrayB(values.length, StringSimpledCoder.instance, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (String v : values) {
|
for (String v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
out.writeArrayMark();
|
out.writeArrayMark();
|
||||||
}
|
|
||||||
out.writeString(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
}
|
||||||
|
out.writeString(v);
|
||||||
|
flag = true;
|
||||||
}
|
}
|
||||||
out.writeArrayE();
|
out.writeArrayE();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ public abstract class JsonWriter extends Writer {
|
|||||||
writeNull();
|
writeNull();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
writeArrayB(values.length, null, null, values);
|
writeArrayB(values.length, null, values);
|
||||||
boolean flag = false;
|
boolean flag = false;
|
||||||
for (byte v : values) {
|
for (byte v : values) {
|
||||||
if (flag) {
|
if (flag) {
|
||||||
@@ -224,10 +224,9 @@ public abstract class JsonWriter extends Writer {
|
|||||||
public final void writeClassName(String clazz) {}
|
public final void writeClassName(String clazz) {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int writeObjectB(Object obj) {
|
public final void writeObjectB(Object obj) {
|
||||||
super.writeObjectB(obj);
|
super.writeObjectB(obj);
|
||||||
writeTo(BYTE_LBRACE);
|
writeTo(BYTE_LBRACE);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -241,9 +240,8 @@ public abstract class JsonWriter extends Writer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int writeArrayB(int size, Encodeable arrayEncoder, Encodeable componentEncoder, Object obj) {
|
public final void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
|
||||||
writeTo(BYTE_LBRACKET);
|
writeTo(BYTE_LBRACKET);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -257,9 +255,8 @@ public abstract class JsonWriter extends Writer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
|
public final void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
|
||||||
writeTo(BYTE_LBRACE);
|
writeTo(BYTE_LBRACE);
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -9,29 +9,21 @@ import java.lang.reflect.Type;
|
|||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 非基本类型数组序列化。 注意: 基础类型不能使用此类
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
* @param <T> T
|
* @param <T> T
|
||||||
*/
|
*/
|
||||||
public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T> {
|
public class ProtobufArrayEncoder<T> extends ArrayEncoder<ProtobufWriter, T> {
|
||||||
|
|
||||||
protected final boolean simple;
|
|
||||||
|
|
||||||
public ProtobufArrayEncoder(ProtobufFactory factory, Type type) {
|
public ProtobufArrayEncoder(ProtobufFactory factory, Type type) {
|
||||||
super(factory, type);
|
super(factory, type);
|
||||||
this.simple = ProtobufFactory.isNoLenBytesType(getComponentType());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void writeMemberValue(ProtobufWriter out, EnMember member, Encodeable encoder, Object item, int index) {
|
protected void writeMemberValue(ProtobufWriter out, EnMember member, Encodeable encoder, Object item, int index) {
|
||||||
if (simple) {
|
if (member != null) {
|
||||||
if (item == null) {
|
out.writeFieldName(member);
|
||||||
out.writeUInt32(0);
|
|
||||||
} else {
|
|
||||||
componentEncoder.convertTo(out, item);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (member != null) out.writeFieldName(member);
|
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
out.writeUInt32(0);
|
out.writeUInt32(0);
|
||||||
} else if (item instanceof CharSequence) {
|
} else if (item instanceof CharSequence) {
|
||||||
|
|||||||
@@ -14,24 +14,15 @@ import org.redkale.convert.*;
|
|||||||
*/
|
*/
|
||||||
public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWriter, T> {
|
public class ProtobufCollectionEncoder<T> extends CollectionEncoder<ProtobufWriter, T> {
|
||||||
|
|
||||||
protected final boolean simple;
|
|
||||||
|
|
||||||
public ProtobufCollectionEncoder(ProtobufFactory factory, Type type) {
|
public ProtobufCollectionEncoder(ProtobufFactory factory, Type type) {
|
||||||
super(factory, type);
|
super(factory, type);
|
||||||
this.simple = ProtobufFactory.isNoLenBytesType(getComponentType());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
|
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
|
||||||
if (simple) {
|
if (member != null) {
|
||||||
if (item == null) {
|
out.writeFieldName(member);
|
||||||
out.writeUInt32(0);
|
|
||||||
} else {
|
|
||||||
componentEncoder.convertTo(out, item);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (member != null) out.writeFieldName(member);
|
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
out.writeUInt32(0);
|
out.writeUInt32(0);
|
||||||
} else if (item instanceof CharSequence) {
|
} else if (item instanceof CharSequence) {
|
||||||
|
|||||||
@@ -4,25 +4,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.convert.pb;
|
package org.redkale.convert.pb;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.*;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.Map;
|
import java.util.concurrent.atomic.*;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
import org.redkale.asm.Asms;
|
|
||||||
import org.redkale.asm.ClassWriter;
|
|
||||||
import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES;
|
import static org.redkale.asm.ClassWriter.COMPUTE_FRAMES;
|
||||||
import org.redkale.asm.FieldVisitor;
|
import org.redkale.asm.*;
|
||||||
import org.redkale.asm.Label;
|
|
||||||
import org.redkale.asm.MethodVisitor;
|
|
||||||
import org.redkale.asm.Opcodes;
|
|
||||||
import static org.redkale.asm.Opcodes.*;
|
import static org.redkale.asm.Opcodes.*;
|
||||||
import org.redkale.convert.*;
|
import org.redkale.convert.*;
|
||||||
import org.redkale.util.AnyValue;
|
import org.redkale.util.*;
|
||||||
import org.redkale.util.RedkaleClassLoader;
|
|
||||||
import org.redkale.util.RedkaleException;
|
|
||||||
import org.redkale.util.Utility;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 简单对象的PROTOBUF序列化操作类
|
* 简单对象的PROTOBUF序列化操作类
|
||||||
@@ -179,8 +169,7 @@ public abstract class ProtobufDynEncoder<T> extends ProtobufObjectEncoder<T> {
|
|||||||
|
|
||||||
mv.visitVarInsn(ALOAD, 3);
|
mv.visitVarInsn(ALOAD, 3);
|
||||||
mv.visitVarInsn(ALOAD, 2);
|
mv.visitVarInsn(ALOAD, 2);
|
||||||
mv.visitMethodInsn(INVOKEVIRTUAL, pbwriterName, "writeObjectB", "(Ljava/lang/Object;)I", false);
|
mv.visitMethodInsn(INVOKEVIRTUAL, pbwriterName, "writeObjectB", "(Ljava/lang/Object;)V", false);
|
||||||
mv.visitInsn(POP);
|
|
||||||
|
|
||||||
for (EnMember member : selfObjEncoder.getMembers()) {
|
for (EnMember member : selfObjEncoder.getMembers()) {
|
||||||
final String fieldName = member.getAttribute().field();
|
final String fieldName = member.getAttribute().field();
|
||||||
|
|||||||
@@ -14,27 +14,18 @@ import org.redkale.convert.*;
|
|||||||
*/
|
*/
|
||||||
public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T> {
|
public class ProtobufStreamEncoder<T> extends StreamEncoder<ProtobufWriter, T> {
|
||||||
|
|
||||||
protected final boolean simple;
|
|
||||||
|
|
||||||
public ProtobufStreamEncoder(ConvertFactory factory, Type type) {
|
public ProtobufStreamEncoder(ConvertFactory factory, Type type) {
|
||||||
super(factory, type);
|
super(factory, type);
|
||||||
this.simple = ProtobufFactory.isNoLenBytesType(getComponentType());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
|
protected void writeMemberValue(ProtobufWriter out, EnMember member, Object item, boolean first) {
|
||||||
if (simple) {
|
|
||||||
if (item == null) {
|
|
||||||
out.writeUInt32(0);
|
|
||||||
} else {
|
|
||||||
componentEncoder.convertTo(out, item);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (member != null) {
|
if (member != null) {
|
||||||
out.writeFieldName(member);
|
out.writeFieldName(member);
|
||||||
}
|
}
|
||||||
if (item instanceof CharSequence) {
|
if (item == null) {
|
||||||
|
out.writeUInt32(0);
|
||||||
|
} else if (item instanceof CharSequence) {
|
||||||
componentEncoder.convertTo(out, item);
|
componentEncoder.convertTo(out, item);
|
||||||
} else {
|
} else {
|
||||||
ProtobufWriter tmp = out.pollChild();
|
ProtobufWriter tmp = out.pollChild();
|
||||||
|
|||||||
@@ -279,9 +279,9 @@ public class ProtobufWriter extends Writer implements ByteTuple {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int writeObjectB(Object obj) {
|
@ClassDepends
|
||||||
super.writeObjectB(obj);
|
public void writeObjectB(Object obj) {
|
||||||
return -1;
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -293,8 +293,8 @@ public class ProtobufWriter extends Writer implements ByteTuple {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int writeArrayB(int size, Encodeable encoder, Encodeable componentEncoder, Object obj) {
|
public void writeArrayB(int size, Encodeable componentEncoder, Object obj) {
|
||||||
return -1;
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -308,8 +308,8 @@ public class ProtobufWriter extends Writer implements ByteTuple {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
|
public void writeMapB(int size, Encodeable keyEncoder, Encodeable valueEncoder, Object obj) {
|
||||||
return -1;
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -329,21 +329,7 @@ public class ProtobufWriter extends Writer implements ByteTuple {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void writeByteArray(byte[] values) {
|
public final void writeByteArray(byte[] values) {
|
||||||
if (values == null) {
|
writeBytes(values);
|
||||||
writeNull();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (writeArrayB(values.length, null, null, values) < 0) {
|
|
||||||
boolean flag = false;
|
|
||||||
for (byte v : values) {
|
|
||||||
if (flag) {
|
|
||||||
writeArrayMark();
|
|
||||||
}
|
|
||||||
writeByte(v);
|
|
||||||
flag = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
writeArrayE();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user