You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@thrift.apache.org by Bryan Duxbury <br...@rapleaf.com> on 2010/10/19 19:27:49 UTC
How to make use of new ByteBuffer features in Java
I wrote up a very quick explanation about how you might make use of the new
ByteBuffer features in Java Thrift 0.5 to achieve a zero-copy system:
http://blog.rapleaf.com/dev/2010/10/19/striving-for-zero-copies-with-thrift-0.5/
I'd love your feedback!
-Bryan
Re: How to make use of new ByteBuffer features in Java
Posted by Bryan Duxbury <br...@rapleaf.com>.
On Tue, Oct 19, 2010 at 10:34 AM, Jake Luciani <ja...@gmail.com> wrote:
> "There’s some trickiness that goes into understanding why the first element
> in the backing byte array is arrayOffset() + position(), but for right now,
> trust me that it’s the case."
>
In my experiments, the only time I could get a nonzero arrayOffset was when
I used the slice() method to get ByteBuffer that captured a view starting at
the current position. Thrift doesn't currently use slice() internally, so
you won't run into this scenario in the standard case, but if someone else
puts a ByteBuffer into the field, then all bets are off.
>
> Can you explain this? also, remaining() is defined as limit() - position()
> so when you say out.write(value.array(), value.arrayOffset() +
> value.position(), value.remaining());
> Won't you overflow?
>
No, you won't overflow. There has to be at least remaining() more bytes
after arrayOffset() + position(). I have a feeling I'm going to be writing
another blog post on this. Here's a diagram:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
^ ^ ^
| | |
| position limit
array offset
The above code would get bytes 1-5 inclusive.
>
> -Jake
>
> On Tue, Oct 19, 2010 at 1:27 PM, Bryan Duxbury <br...@rapleaf.com> wrote:
>
> > I wrote up a very quick explanation about how you might make use of the
> new
> > ByteBuffer features in Java Thrift 0.5 to achieve a zero-copy system:
> >
> >
> >
> http://blog.rapleaf.com/dev/2010/10/19/striving-for-zero-copies-with-thrift-0.5/
> >
> > I'd love your feedback!
> >
> > -Bryan
> >
>
Re: How to make use of new ByteBuffer features in Java
Posted by Jake Luciani <ja...@gmail.com>.
"There’s some trickiness that goes into understanding why the first element
in the backing byte array is arrayOffset() + position(), but for right now,
trust me that it’s the case."
Can you explain this? also, remaining() is defined as limit() - position()
so when you say out.write(value.array(), value.arrayOffset() +
value.position(), value.remaining());
Won't you overflow?
-Jake
On Tue, Oct 19, 2010 at 1:27 PM, Bryan Duxbury <br...@rapleaf.com> wrote:
> I wrote up a very quick explanation about how you might make use of the new
> ByteBuffer features in Java Thrift 0.5 to achieve a zero-copy system:
>
>
> http://blog.rapleaf.com/dev/2010/10/19/striving-for-zero-copies-with-thrift-0.5/
>
> I'd love your feedback!
>
> -Bryan
>