MyMessage.STRUCT_SIZE
その構造体自体の一定サイズ (8 バイトの単語で測定) を表しますが、構造体に重要なフィールド (テキスト、データ、リスト、またはその他の構造体など) が含まれている場合、それらもスペースを占有し、スペースの量それらが取るのは一定ではありません(たとえば、テキストは文字列の長さに応じてスペースを取ります)。
通常、Cap'n Proto が適切な s に直接書き込み/読み取りできるByteChannel
ようにして、自分でサイズを追跡する必要がないようにする必要があります。ただし、事前にメッセージのサイズを本当に計算する必要がある場合は、次のような方法で計算できます。
ByteBuffer[] segments = message.getSegmentsForOutput();
int total = (segments.length / 2 + 1) * 8; // segment table
for (ByteBuffer segment: segments) {
total += segment.remaining();
}
// now `total` is the total number of bytes that will be
// written when the message is serialized.
capnp::computeSerializedSizeInWords()
C++ サイズでは、 from serialize.h
(および 8 倍) を使用できます。
org.capnproto.Serialize
しかし繰り返しになりますが、ストリーミング I/Oのメソッドを使用して、これを回避するようにコードを構成する必要があります。