@Override
    public ByteBuffer getByteBuffer() {
        // lazily provide the ByteBuffer
        if (byteBuffer != null) {
            return byteBuffer;
        } else if (byteBufferSupplier == null) {
            throw new IllegalStateException(LogUtil.message("The byteBuffer has been returned to the pool"));
        } else {
            byteBuffer = byteBufferSupplier.get();
            return byteBuffer;
        }
    }
@return The underlying {@link ByteBuffer} that was obtained from the pool.
Depending on the implementation of the pool this method may block if the pool has no buffers when called.
The returned {@link ByteBuffer} must not be used once release/close are called.
stroom-bytebuffer/src/main/java/stroom/bytebuffer/PooledByteBufferImpl.java