On Tue, Dec 22, 2009 at 8:18 PM, David Yu <[email protected]> wrote:

>
>
> On Wed, Dec 23, 2009 at 11:14 AM, Kenton Varda <[email protected]> wrote:
>
>> On Tue, Dec 22, 2009 at 7:06 PM, David Yu <[email protected]> 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
>> this.
>>
>> 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.
>>
>
> Cool.
> Btw, the ByteString's snippet is:
>  return new ByteString(text.getBytes("UTF-
> 8"));
>
> Another improvement would be avoiding the lookup and instead cache the
> Charset.forName("UTF-8") object and use it.
> I believe you google guys have also been evangelizing this :-) (PDF from
> http://code.google.com/p/guava-libraries/)
>

I tried doing that at one point and found that it was *much slower* --
apparently String.getBytes("UTF-8") is highly-optimized, whereas creating a
Charset object (even statically) and using that is not.  :/

--

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


Reply via email to