On 2/23/12 3:10 PM, Tigran Mkrtchyan wrote:
> Hi.
>
> Tracing it costed me a week of debugging:
>
> @Test
> public void testBufferSlice() {
> Buffer b = MemoryManager.
> DEFAULT_MEMORY_MANAGER.allocate(10);
> b.putInt(1);
> ByteBuffer bb = b.slice().toByteBuffer();
> bb.rewind();
> bb.putInt(2);
>
> b.rewind();
> assertEquals(b.getInt(), 1);
> }
>
>
> here is the code:
>
> @Override
> public ByteBuffer toByteBuffer(final int position, final int limit) {
> if (byteBuffer == null) {
> byteBuffer = ByteBuffer.wrap(heap);
> }
>
> Buffers.setPositionLimit(byteBuffer, offset + position, offset + limit);
> return byteBuffer;
> }
>
>
> I think it's a bug and have to be:
> byteBuffer = ByteBuffer.wrap(heap, offset, cap);
>
> or java doc have to be updated ( and created in the first place) to
> describe that toByteBuffer exposes underlying heap.
I believe the behavior is correct, but you're right, the documentation
is lacking.
I've logged:
http://java.net/jira/browse/GRIZZLY-1205
>
> Tigran.