Java Proto Lite: Serialize repeated enums without allocating

Serialize repeated enums without allocating

PiperOrigin-RevId: 628915124
pull/16585/head
Protobuf Team Bot 11 months ago committed by Copybara-Service
parent b3e7a00774
commit de6aba9f63
  1. 32
      java/core/src/main/java/com/google/protobuf/CodedOutputStreamWriter.java

@ -557,6 +557,38 @@ final class CodedOutputStreamWriter implements Writer {
@Override
public void writeEnumList(int fieldNumber, List<Integer> value, boolean packed)
throws IOException {
if (value instanceof IntArrayList) {
writeEnumListInternal(fieldNumber, (IntArrayList) value, packed);
} else {
writeEnumListInternal(fieldNumber, value, packed);
}
}
private void writeEnumListInternal(int fieldNumber, IntArrayList value, boolean packed)
throws IOException {
if (packed) {
output.writeTag(fieldNumber, WIRETYPE_LENGTH_DELIMITED);
// Compute and write the length of the data.
int dataSize = 0;
for (int i = 0; i < value.size(); ++i) {
dataSize += CodedOutputStream.computeEnumSizeNoTag(value.getInt(i));
}
output.writeUInt32NoTag(dataSize);
// Write the data itself, without any tags.
for (int i = 0; i < value.size(); ++i) {
output.writeEnumNoTag(value.getInt(i));
}
} else {
for (int i = 0; i < value.size(); ++i) {
output.writeEnum(fieldNumber, value.getInt(i));
}
}
}
private void writeEnumListInternal(int fieldNumber, List<Integer> value, boolean packed)
throws IOException {
if (packed) {
output.writeTag(fieldNumber, WIRETYPE_LENGTH_DELIMITED);

Loading…
Cancel
Save