HBASE-16880 Correct the javadoc/behaviour of the APIs in ByteBufferUtils
(Ram)
This commit is contained in:
parent
4533bb63cf
commit
9875c699af
|
@ -365,16 +365,22 @@ public final class ByteBufferUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy one buffer's whole data to another. Write starts at the current position of 'out' buffer.
|
* Copy one buffer's whole data to another. Write starts at the current position of 'out' buffer.
|
||||||
* Note : This will advance the position marker of {@code out} but not change the position maker
|
* Note : This will advance the position marker of {@code out} and also change the position maker
|
||||||
* for {@code in}. The position and limit of the {@code in} buffer to be set properly by caller.
|
* for {@code in}.
|
||||||
* @param in source buffer
|
* @param in source buffer
|
||||||
* @param out destination buffer
|
* @param out destination buffer
|
||||||
*/
|
*/
|
||||||
public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out) {
|
public static void copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out) {
|
||||||
if (UNSAFE_AVAIL) {
|
if (in.hasArray() && out.hasArray()) {
|
||||||
|
int length = in.remaining();
|
||||||
|
System.arraycopy(in.array(), in.arrayOffset(), out.array(), out.arrayOffset(), length);
|
||||||
|
out.position(out.position() + length);
|
||||||
|
in.position(in.limit());
|
||||||
|
} else if (UNSAFE_AVAIL) {
|
||||||
int length = in.remaining();
|
int length = in.remaining();
|
||||||
UnsafeAccess.copy(in, in.position(), out, out.position(), length);
|
UnsafeAccess.copy(in, in.position(), out, out.position(), length);
|
||||||
out.position(out.position() + length);
|
out.position(out.position() + length);
|
||||||
|
in.position(in.limit());
|
||||||
} else {
|
} else {
|
||||||
out.put(in);
|
out.put(in);
|
||||||
}
|
}
|
||||||
|
|
|
@ -374,6 +374,21 @@ public class TestByteBufferUtils {
|
||||||
assertEquals(l, Bytes.toLong(b, 7));
|
assertEquals(l, Bytes.toLong(b, 7));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRelativeCopyFromBuffertoBuffer() {
|
||||||
|
ByteBuffer bb1 = ByteBuffer.allocate(135);
|
||||||
|
ByteBuffer bb2 = ByteBuffer.allocate(135);
|
||||||
|
fillBB(bb1, (byte) 5);
|
||||||
|
ByteBufferUtils.copyFromBufferToBuffer(bb1, bb2);
|
||||||
|
assertTrue(bb1.position() == bb2.position());
|
||||||
|
assertTrue(bb1.limit() == bb2.limit());
|
||||||
|
bb1 = ByteBuffer.allocateDirect(135);
|
||||||
|
bb2 = ByteBuffer.allocateDirect(135);
|
||||||
|
fillBB(bb1, (byte) 5);
|
||||||
|
ByteBufferUtils.copyFromBufferToBuffer(bb1, bb2);
|
||||||
|
assertTrue(bb1.position() == bb2.position());
|
||||||
|
assertTrue(bb1.limit() == bb2.limit());
|
||||||
|
}
|
||||||
@Test
|
@Test
|
||||||
public void testCompareTo() {
|
public void testCompareTo() {
|
||||||
ByteBuffer bb1 = ByteBuffer.allocate(135);
|
ByteBuffer bb1 = ByteBuffer.allocate(135);
|
||||||
|
|
Loading…
Reference in New Issue