[protobuf] Re: Seek in a codedoutputstream
Oh, I see. No, CodedOutputStream doesn't support seek functionality, so I guess you'd have to go with b). Just make sure that you're using WriteLittleEndian64 and not WriteVarint64. On Sat, Nov 14, 2009 at 12:05 PM, Fishtank saptarshi.g...@gmail.com wrote: That's because I don't know the size of data1(and it is not from protobuf parse) I'm using protobuf for the stream libraries. I can either a) loop through the calculation to get the total data size, then loop again writing size and data or b) loop once, write, get size, seek and adjust size. Regards sapsi On Nov 14, 2:56 pm, Jason Hsueh jas...@google.com wrote: Why can't you write the actual size of data rather than a 0? Just use the ByteSize() method to find out how much data will be written for a protocol buffer. On Sat, Nov 14, 2009 at 11:39 AM, Fishtank saptarshi.g...@gmail.com wrote: Hello, I'm using the following idiom ZeroCopyOutputStream* raw_output = new FileOutputStream(fd); CodedOutputStream* coded_output = new CodedOutputStream(raw_output); The format i'd like is uint64_t, followed by data1, followed by data2. I write a 0 for the uint64_t, write the data1, record the bytes written (B), then write data2. I'd like to seek to the beginning of the file and change the uint64_t val (which was 0 ) to B. (data2 is updated much more frequently than data1) It appears codedoutputstream doesn't have a seek, so I'm thinking , after the above steps a) deleting the CodedOutputStream and Zero... b) seek on the fd, and update the value. Does this sound right? Regards Sapsi --~--~-~--~~~---~--~~ 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 protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~--~~~~--~~--~--~---
[protobuf] Re: Seek in a codedoutputstream
Why can't you write the actual size of data rather than a 0? Just use the ByteSize() method to find out how much data will be written for a protocol buffer. On Sat, Nov 14, 2009 at 11:39 AM, Fishtank saptarshi.g...@gmail.com wrote: Hello, I'm using the following idiom ZeroCopyOutputStream* raw_output = new FileOutputStream(fd); CodedOutputStream* coded_output = new CodedOutputStream(raw_output); The format i'd like is uint64_t, followed by data1, followed by data2. I write a 0 for the uint64_t, write the data1, record the bytes written (B), then write data2. I'd like to seek to the beginning of the file and change the uint64_t val (which was 0 ) to B. (data2 is updated much more frequently than data1) It appears codedoutputstream doesn't have a seek, so I'm thinking , after the above steps a) deleting the CodedOutputStream and Zero... b) seek on the fd, and update the value. Does this sound right? Regards Sapsi --~--~-~--~~~---~--~~ 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 protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~--~~~~--~~--~--~---
[protobuf] Re: Seek in a codedoutputstream
That's because I don't know the size of data1(and it is not from protobuf parse) I'm using protobuf for the stream libraries. I can either a) loop through the calculation to get the total data size, then loop again writing size and data or b) loop once, write, get size, seek and adjust size. Regards sapsi On Nov 14, 2:56 pm, Jason Hsueh jas...@google.com wrote: Why can't you write the actual size of data rather than a 0? Just use the ByteSize() method to find out how much data will be written for a protocol buffer. On Sat, Nov 14, 2009 at 11:39 AM, Fishtank saptarshi.g...@gmail.com wrote: Hello, I'm using the following idiom ZeroCopyOutputStream* raw_output = new FileOutputStream(fd); CodedOutputStream* coded_output = new CodedOutputStream(raw_output); The format i'd like is uint64_t, followed by data1, followed by data2. I write a 0 for the uint64_t, write the data1, record the bytes written (B), then write data2. I'd like to seek to the beginning of the file and change the uint64_t val (which was 0 ) to B. (data2 is updated much more frequently than data1) It appears codedoutputstream doesn't have a seek, so I'm thinking , after the above steps a) deleting the CodedOutputStream and Zero... b) seek on the fd, and update the value. Does this sound right? Regards Sapsi --~--~-~--~~~---~--~~ 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 protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~--~~~~--~~--~--~---