public static ByteBuf copiedBuffer(byte[] array) {
        if (array.length == 0) {
            return EMPTY_BUFFER;
        }
        return wrappedBuffer(array.clone());
    }
@Test
    public void testCopiedBuffer() {
        ByteBuf copied = copiedBuffer(ByteBuffer.allocateDirect(16));
        assertEquals(16, copied.capacity());
        copied.release();

        assertEqualsAndRelease(wrappedBuffer(new byte[] { 1, 2, 3 }),
                copiedBuffer(new byte[][] { new byte[] { 1, 2, 3 } }));

        assertEqualsAndRelease(wrappedBuffer(new byte[] { 1, 2, 3 }),
                copiedBuffer(new byte[] { 1 }, new byte[] { 2 }, new byte[] { 3 }));

        assertEqualsAndRelease(wrappedBuffer(new byte[] { 1, 2, 3 }),
                copiedBuffer(new ByteBuf[] { wrappedBuffer(new byte[] { 1, 2, 3 })}));

        assertEqualsAndRelease(wrappedBuffer(new byte[] { 1, 2, 3 }),
                copiedBuffer(wrappedBuffer(new byte[] { 1 }),
                        wrappedBuffer(new byte[] { 2 }), wrappedBuffer(new byte[] { 3 })));

        assertEqualsAndRelease(wrappedBuffer(new byte[] { 1, 2, 3 }),
                copiedBuffer(new ByteBuffer[] { ByteBuffer.wrap(new byte[] { 1, 2, 3 }) }));

        assertEqualsAndRelease(wrappedBuffer(new byte[] { 1, 2, 3 }),
                copiedBuffer(ByteBuffer.wrap(new byte[] { 1 }),
                        ByteBuffer.wrap(new byte[] { 2 }), ByteBuffer.wrap(new byte[] { 3 })));
    }