public int read(byte[] b, int offset, int length) throws IOException {
            if (offset < 0 || offset + length > b.length) {
                throw new IndexOutOfBoundsException();
            }
            int sourceLength = _value._end - _value._next;
            if (length > sourceLength) {
                throw new IOException("Not enough bytes remaining in value");
            }
            System.arraycopy(_value._bytes, _value._next, b, offset, length);
            _value._next += length;
            return length;
        }