Kenton Varda, el 19 de septiembre a las 16:12 me escribiste: > You probably shouldn't rely on this. Some of the serialization methods will > guarantee this, some won't. What you can do is call ByteSize() yourself, > and then use SerializeWithCachedSizes(), which requires that ByteSize() was > already called and won't call it again. You'll have to do a small amount of > extra setup (allocating a ZeroCopyOutputStream and a CodedOutputStream), but > it's pretty straightforward -- you can just copy the code out of message.cc. > Another thing that you could do which is specific to your use case: Instead > of allocating a byte array to serialize into, just use a string: > > string bytes; > pkt.SerializeToString(&bytes); > send(fd, bytes.data(), bytes.size(), 0);
Thanks for the tip. I didn't do it this way because I use the same buffer for receiving, and I can't use std::string for receiving. I could use two buffers, but now I wonder how std::string is used when serializing. Is the ByteSize() precalculated and space is reserve()ed in the string or it's incrementally expanded as it's serialized? > This is better anyway since it won't break if your messages become larger > than SIZE. This is not a problem to me, all messages are really short and I have a physical size limit imposed by the lower level (I'm using TIPC RDM sockets) anyway. So I have to drop the message (or abort the program) if it's size is longer than this limit, and I have guaranteed that I can't possibly receive a message that doesn't fit my buffer. -- Leandro Lucarella (luca) | Blog colectivo: http://www.mazziblog.com.ar/blog/ ---------------------------------------------------------------------------- GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05) ---------------------------------------------------------------------------- HOMBRE DESNUDO AMENAZA A LOS VECINOS CON UNA "KATANA" DESDE SU BALCON -- Crónica TV --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to protobuf@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~----------~----~----~----~------~----~------~--~---