This commit is contained in:
redkale
2024-09-28 15:20:38 +08:00
parent 81c7c162bb
commit 7229fb90de
8 changed files with 73 additions and 75 deletions

View File

@@ -10,6 +10,8 @@ import java.util.Collection;
import org.redkale.convert.*;
/**
* 非基本类型的数组反序列化
*
* @author zhangjx
* @param <T> T
*/
@@ -26,7 +28,7 @@ public class ProtobufCollectionDecoder<T> extends CollectionDecoder<ProtobufRead
@Override
public Collection<T> convertFrom(ProtobufReader in, DeMember member) {
this.checkInited();
final boolean simpled = !this.componentSimpled;
final boolean simpled = this.componentSimpled;
final Decodeable<ProtobufReader, T> itemDecoder = this.componentDecoder;
in.readArrayB(itemDecoder);
final Collection<T> result = this.creator.create();

View File

@@ -435,7 +435,7 @@ public class ProtobufConvert extends BinaryConvert<ProtobufReader, ProtobufWrite
}
}
public <T> String getProtoDescriptor(Type type) {
public String getProtoDescriptor(Type type) {
StringBuilder sb = new StringBuilder();
Class clazz = TypeToken.typeToClass(type);
sb.append("//java ")

View File

@@ -14,6 +14,8 @@ import org.redkale.util.Creator;
/** @author zhangjx */
public class ProtobufReader extends Reader {
protected static final Creator LIS_CREATOR = Creator.create(List.class);
protected int position = -1;
protected byte[] content;
@@ -315,14 +317,8 @@ public class ProtobufReader extends Reader {
}
public AtomicInteger[] readAtomicIntegers() {
int len = readRawVarint32();
List<AtomicInteger> list = new ArrayList<>(len);
while (len > 0) {
int val = readInt();
list.add(new AtomicInteger(val));
len -= ProtobufFactory.computeSInt32SizeNoTag(val);
}
return list.toArray(new AtomicInteger[list.size()]);
Collection<AtomicInteger> data = readAtomicIntegers(LIS_CREATOR);
return data.toArray(new AtomicInteger[data.size()]);
}
public Collection<AtomicInteger> readAtomicIntegers(Creator<? extends Collection> creator) {
@@ -392,14 +388,8 @@ public class ProtobufReader extends Reader {
}
public AtomicLong[] readAtomicLongs() {
int len = readRawVarint32();
List<AtomicLong> list = new ArrayList<>(len);
while (len > 0) {
long val = readInt();
list.add(new AtomicLong(val));
len -= ProtobufFactory.computeSInt64SizeNoTag(val);
}
return list.toArray(new AtomicLong[list.size()]);
Collection<AtomicLong> data = readAtomicLongs(LIS_CREATOR);
return data.toArray(new AtomicLong[data.size()]);
}
public Collection<AtomicLong> readAtomicLongs(Creator<? extends Collection> creator) {
@@ -413,6 +403,22 @@ public class ProtobufReader extends Reader {
return data;
}
public String[] readStrings(int tag) {
Collection<String> data = readStrings(tag, LIS_CREATOR);
return data.toArray(new String[data.size()]);
}
public Collection<String> readStrings(int tag, Creator<? extends Collection> creator) {
Collection<String> data = creator.create();
while (true) {
data.add(readString());
if (!readNextTag(tag)) {
break;
}
}
return data;
}
@Override
public final double readDouble() {
return Double.longBitsToDouble(readRawLittleEndian64());
@@ -455,11 +461,15 @@ public class ProtobufReader extends Reader {
}
public boolean readNextTag(DeMember member) {
return readNextTag(member.getTag());
}
public boolean readNextTag(int memberTag) {
if (!hasNext()) {
return false;
}
int tag = readTag();
if (tag != member.getTag()) { // 元素结束
if (tag != memberTag) { // 元素结束
backTag(tag);
return false;
}

View File

@@ -27,7 +27,7 @@ public class ProtobufStreamDecoder<T> extends StreamDecoder<ProtobufReader, T>
@Override
public Stream<T> convertFrom(ProtobufReader in, DeMember member) {
this.checkInited();
final boolean simpled = !this.componentSimpled;
final boolean simpled = this.componentSimpled;
final Decodeable<ProtobufReader, T> itemDecoder = this.componentDecoder;
in.readArrayB(itemDecoder);
final List<T> result = new ArrayList();