Skip to content

Commit caff045

Browse files
committed
move long encoding out of loop
1 parent 4d0e359 commit caff045

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

java/fory-core/src/main/java/org/apache/fory/serializer/ArraySerializers.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ public LongArraySerializer(Fory fory) {
496496
@Override
497497
public void write(MemoryBuffer buffer, long[] value) {
498498
if (fory.getBufferCallback() == null) {
499-
if (fory.getConfig().compressLongArray()) {
499+
if (fory.getConfig().compressLongArray() && fory.getConfig().longEncoding() != LongEncoding.LE_RAW_BYTES) {
500500
writeInt64s(buffer, value, fory.getConfig().longEncoding());
501501
return;
502502
}
@@ -526,7 +526,7 @@ public long[] read(MemoryBuffer buffer) {
526526
}
527527
return values;
528528
}
529-
if(fory.getConfig().compressLongArray()){
529+
if(fory.getConfig().compressLongArray() && fory.getConfig().longEncoding() != LongEncoding.LE_RAW_BYTES){
530530
return readInt64s(buffer, fory.getConfig().longEncoding());
531531
}
532532
int size = buffer.readVarUint32Small7();
@@ -541,16 +541,30 @@ public long[] read(MemoryBuffer buffer) {
541541
private void writeInt64s(MemoryBuffer buffer, long[] value, LongEncoding longEncoding) {
542542
int length = value.length;
543543
buffer.writeVarUint32Small7(length);
544+
545+
if(longEncoding == LongEncoding.SLI){
546+
for (int i = 0; i < length; i++) {
547+
buffer.writeSliInt64(value[i]);
548+
}
549+
return;
550+
}
544551
for (int i = 0; i < length; i++) {
545-
PrimitiveSerializers.LongSerializer.writeInt64(buffer, value[i], longEncoding);
552+
buffer.writeVarInt64(value[i]);
546553
}
547554
}
548555

549556
public long[] readInt64s(MemoryBuffer buffer, LongEncoding longEncoding) {
550557
int numElements = buffer.readVarUint32Small7();
551558
long[] values = new long[numElements];
552-
for (int i = 0; i < numElements; i++) {
553-
values[i] = PrimitiveSerializers.LongSerializer.readInt64(buffer, longEncoding);
559+
560+
if(longEncoding == LongEncoding.SLI){
561+
for (int i = 0; i < numElements; i++) {
562+
values[i] = buffer.readSliInt64();
563+
}
564+
} else {
565+
for (int i = 0; i < numElements; i++) {
566+
values[i] = buffer.readVarInt64();
567+
}
554568
}
555569
return values;
556570
}

0 commit comments

Comments
 (0)