Re: [protobuf] Re: Any sample messages/data for optimization out there?

2010-03-09 Thread Evan Jones

On Mar 9, 2010, at 3:21 , Paul Rudd wrote:

Which actually brings up a feature request -
MessageLite.Builder.mergeDelimitedFrom(InputStream) is too inefficient
for small streamed messages, since it creates a new CodedInputStream
(and 4KB buffer to go with it) every time. The addition of a
mergeDelimitedFrom(CodedInputStream) would be welcomed.



You can do this yourself. I think the following  would work:

int length = inputStream.readRawVarint32();
int oldLimit = inputStream.pushLimit(length);
builder.mergeFrom(inputStream);
inputStream.popLimit(oldLimit);

Evan

--
Evan Jones
http://evanjones.ca/

--
You received this message because you are subscribed to the Google Groups Protocol 
Buffers group.
To post to this group, send email to proto...@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.



Re: [protobuf] Re: Any sample messages/data for optimization out there?

2010-03-09 Thread Kenton Varda
On Tue, Mar 9, 2010 at 3:41 AM, Evan Jones ev...@mit.edu wrote:

 On Mar 9, 2010, at 3:21 , Paul Rudd wrote:

 Which actually brings up a feature request -
 MessageLite.Builder.mergeDelimitedFrom(InputStream) is too inefficient
 for small streamed messages, since it creates a new CodedInputStream
 (and 4KB buffer to go with it) every time. The addition of a
 mergeDelimitedFrom(CodedInputStream) would be welcomed.



 You can do this yourself. I think the following  would work:

 int length = inputStream.readRawVarint32();
 int oldLimit = inputStream.pushLimit(length);
 builder.mergeFrom(inputStream);
 inputStream.popLimit(oldLimit);


Yep, that works.

In fact, you can even do the above in one line:

  codedInput.readMessage(builder, ExtensionRegistryLite.getEmptyRegistry());

It turns out that since readMessage() assumes the tag was already read, it
parses the exact same format that mergeDelimitedFrom() does.

-- 
You received this message because you are subscribed to the Google Groups 
Protocol Buffers group.
To post to this group, send email to proto...@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.