Rozważmy schemat Cap'n'Proto tak:Stream podczas szeregowania z 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 */
}
Teraz chcę serializacji (czyli build) wystąpienie dokument i przesyłać go do odległego miejsca przeznaczenia.
Ponieważ dokument jest zwykle bardzo duży, nie chcę go całkowicie skompilować w pamięci przed wysłaniem. Zamiast tego szukam konstruktora, który bezpośrednio wysyła strukturę przez strukturę przez przewód. Taki, że dodatkowy potrzebny bufor pamięci jest stały (tj. O (max (sizeof (Header), sizeof (Record), sizeof (Footer)).)
Patrząc na materiał samouczka, nie znajduję takiego konstruktora. MallocMessageBuilder
wydaje się tworzyć wszystko w pamięci pierwszy (wtedy zadzwonić writeMessageToFd
na nim).
Czy support Cap'n'Proto API taki use-case?
Albo jest Cap'n'Proto oznaczało więcej do wykorzystania w przypadku wiadomości pasujących do pamięci przed wysłaniem?
W tym przykładzie można pominąć strukturę dokumentu, a następnie włączyć e może po prostu wysłać sekwencję jednej wiadomości nagłówka, n Nagrać wiadomości i jedną stopkę. Ponieważ komunikat Cap'n'Proto sam się ogranicza, powinno to działać. Ale tracisz swój główny dokument - może czasami nie jest to opcja.