Serialisierung Betrachten wir ein Cap'n'Proto Schema wie folgt aus:Strom, während sie mit Cap'n'Proto
struct Document {
header @0 : Header;
records @1 :List(Record); // usually large number of records.
footer @2 :Footer;
}
struct Header { numberOfRecords : UInt32; /* some fields */ };
struct Footer { /* some fields */ };
struct Record {
type : UInt32;
desc : Text;
/* some more fields, relatively large in total */
}
Jetzt will ich serialisiert werden (das heißt build) eine Dokumentinstanz und streamen es zu einem entfernten Ziel.
Da das Dokument normalerweise sehr groß ist, möchte ich es nicht vollständig im Speicher erstellen, bevor ich es sende. Stattdessen suche ich nach einem Builder, der Struktur für Struktur direkt über die Leitung sendet. So dass der zusätzlich benötigte Speicherpuffer konstant ist (zB O (max (sizeof (Header), sizeof (Record), sizeof (Footer)).
Mit Blick auf das Tutorial-Material finde ich keinen solchen Builder. die MallocMessageBuilder
scheint zunächst alles in Erinnerung zu erstellen (dann rufen Sie writeMessageToFd
drauf).
ist die Cap'n'Proto API-Unterstützung ein solcher anwendungs~~POS=TRUNC?
Oder ist Cap'n'Proto mehr gemeint für Nachrichten, die in den Speicher passen, bevor sie gesendet werden?
In diesem Beispiel könnte die Dokumentstruktur weggelassen werden und dann weiter e könnte einfach eine Sequenz von einer Header-Nachricht, n Record-Nachrichten und einer Fußzeile senden. Da eine Cap'n'Proto-Nachricht sich selbst abgrenzt, sollte dies funktionieren. Aber du verlierst deine Dokumentenwurzel - vielleicht ist das manchmal nicht wirklich eine Option.