Avoid empty byte array allocations in Proto Lite toByteArray(). In AbstractMessageLite.toByteArray(), check if getSerializedSize() == 0 and return Internal.EMPTY_BYTE_ARRAY directly instead of allocating a new 0-byte array and CodedOutputStream wrappers. PiperOrigin-RevId: 970010400
diff --git a/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java b/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java index 884626f..9ca818c 100644 --- a/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java +++ b/java/core/src/main/java/com/google/protobuf/AbstractMessageLite.java
@@ -52,7 +52,11 @@ @Override public byte[] toByteArray() { try { - final byte[] result = new byte[getSerializedSize()]; + final int size = getSerializedSize(); + if (size == 0) { + return Internal.EMPTY_BYTE_ARRAY; + } + final byte[] result = new byte[size]; final CodedOutputStream output = CodedOutputStream.newInstance(result); writeTo(output); output.checkNoSpaceLeft();