On Tue, Dec 22, 2009 at 7:06 PM, David Yu <david.yu....@gmail.com> wrote:

> There should be a writeByteArray(int fieldNumber, byte[] value) in
> CodedOutputStream so that the cached bytes of strings would
> be written directly.  The ByteString would not help, it adds more memory
> since it creates a copy of the byte array.

We could cache the bytes as a ByteString.  Converting a String to a
ByteString does not require a redundant copy, as ByteString has methods for

I think it would be better to do it this way because, in the long run, we
actually want to extend ByteString to allow avoiding copies in some cases.
 For example, if you are serializing a message to a ByteString (you caleld
toByteString()) or parsing from a ByteString, then handling "bytes" fields
should require any copy.  Instead, it should be possible to construct a
ByteString which is a substring of some other ByteString in O(1) time, as
well as concatenate ByteStrings in O(1) time.

So this way, if the size-computation step converted the String to a
ByteString and cached that, no further copy of the bytes would ever be
needed in many cases.


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 
For more options, visit this group at 

Reply via email to