You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Bryan Duxbury (JIRA)" <ji...@apache.org> on 2011/02/09 18:03:57 UTC

[jira] Commented: (THRIFT-1058) All ByteBuffers the client uses should be slice()ed

    [ https://issues.apache.org/jira/browse/THRIFT-1058?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12992574#comment-12992574 ] 

Bryan Duxbury commented on THRIFT-1058:
---------------------------------------

I did a micro benchmark and found that calling slice() takes pretty consistently double the time as just doing wrap(). I don't think the usability benefit (which is, to me, still somewhat dubious) is worth any performance hit.

> All ByteBuffers the client uses should be slice()ed
> ---------------------------------------------------
>
>                 Key: THRIFT-1058
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1058
>             Project: Thrift
>          Issue Type: Bug
>    Affects Versions: 0.6
>            Reporter: ryan rawson
>
> Right now the code does something like yay so:
> return ByteBuffer.wrap(array, pos, len);
> The only problem is that .wrap(byte[],int,int) returns a ByteBuffer with position equal to pos and limit set to pos+len. Which means users cant used 'rewind' or position(0).  
> It would be cleaner if the contract was "ByteBuffers will have position=0, limit=how much data you have".
> The way to accomplish this would be to:
> return ByteBuffer.wrap(array, pos, len).slice();
> In exchange for 1 extra object alloc (which the GC can clean up quick) we get the benefit of a easier to use BB interface.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira