On Fri, Sep 19, 2008 at 7:39 PM, Leandro Lucarella <[EMAIL PROTECTED]> wrote:
> > 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? The size is precomputed. Though, StringOutputStream (a subclass of ZeroCopyOutputStream) can be used without a precomputed size, in which case it grows the string as needed. > > > > 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 -~----------~----~----~----~------~----~------~--~---