Unterstützen Google-Protokollpuffer die Größenberechnung vor der Serialisierung?

Unterstützen Google-Protokollpuffer die Größenberechnung vor der Serialisierung?

Wenn Sie die Nachrichtenobjekte erstellt haben, können Sie ByteSize() für die Nachricht aufrufen, die die Anzahl der Bytes zurückgibt, die die serialisierte Nachricht einnehmen würde. Es gibt einen Link zu den C++-Dokumenten von ByteSize.


Es ist unmöglich, dies im Voraus zu wissen, weil protobuf die Strukturen, die ihm gegeben werden, in so wenig Bytes wie möglich packt – es wird keine vier Bytes für int x = 1; verwenden zum Beispiel - also müsste die Bibliothek den gesamten Graphen durchlaufen, um die Ausgabegröße zu kennen.

Ich glaube, Sie könnten dies herausfinden, indem Sie einen Protobuf-kompatiblen Stream Ihres eigenen Designs serialisieren, der nur die ihm übergebenen Bytes zählt. Das könnte kostspielig werden, aber nicht kostspieliger, als es für die Bibliothek wäre, diese Arbeit zu erledigen.