aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-01-16 18:09:41 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2024-01-16 18:09:41 +0100
commitb1c7443922468278a52a6ff3b45dc4f02104b49b (patch)
tree90f5fa0dacade121419cf715ae0116cc24b2bb6c /document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
parentada510e89058979aecd66598d1853fd09ee0b42d (diff)
- Only call getKey once.
- Just use a presized array of native ints, instead of LinkedList.
Diffstat (limited to 'document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java')
-rw-r--r--document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java30
1 files changed, 14 insertions, 16 deletions
diff --git a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
index 2abaa82d42c..e14d2fea0a2 100644
--- a/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
+++ b/document/src/main/java/com/yahoo/document/serialization/VespaDocumentSerializer6.java
@@ -60,7 +60,6 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -105,8 +104,7 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
doc.getDataType().serialize(this);
if (hasHead) {
- StructuredFieldValue asStructured = doc;
- write(null, asStructured);
+ write(null, (StructuredFieldValue) doc);
}
int finalPos = buf.position();
@@ -327,34 +325,35 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
GrowableByteBuffer buffer = new GrowableByteBuffer(4096, 2.0f);
buf = buffer;
- List<Integer> fieldIds = new LinkedList<>();
- List<java.lang.Integer> fieldLengths = new LinkedList<>();
+ int numFields = s.getFieldCount();
+ int [] fieldIds = new int[numFields];
+ int [] fieldLengths = new int[numFields];
var iter = s.iterator();
- while (iter.hasNext()) {
+ for (int i=0; iter.hasNext(); i++) {
Map.Entry<Field, FieldValue> value = iter.next();
int startPos = buffer.position();
- value.getValue().serialize(value.getKey(), this);
+ Field key = value.getKey();
+ value.getValue().serialize(key, this);
- fieldLengths.add(buffer.position() - startPos);
- fieldIds.add(value.getKey().getId());
+ fieldLengths[i] = buffer.position() - startPos;
+ fieldIds[i] = key.getId();
}
// Switch buffers again:
buffer.flip();
buf = bigBuffer;
- int sz = fieldIds.size();
// Actual serialization starts here.
int lenPos = buf.position();
putInt(null, 0); // Move back to this after compression is done.
buf.put(CompressionType.NONE.getCode());
- buf.putInt1_4Bytes(sz);
+ buf.putInt1_4Bytes(numFields);
- for (int i = 0; i < sz; ++i) {
- putInt1_4Bytes(null, fieldIds.get(i));
- putInt2_4_8Bytes(null, fieldLengths.get(i));
+ for (int i = 0; i < numFields; ++i) {
+ putInt1_4Bytes(null, fieldIds[i]);
+ putInt2_4_8Bytes(null, fieldLengths[i]);
}
int pos = buf.position();
@@ -374,8 +373,7 @@ public class VespaDocumentSerializer6 extends BufferSerializer implements Docume
* @param value - field value
*/
public void write(FieldBase field, Struct value) {
- StructuredFieldValue asStructured = value;
- write(field, asStructured);
+ write(field, (StructuredFieldValue) value);
}
/**