Package org.apache.cayenne.util

## Class MemoryBlob

- java.lang.Object
- - org.apache.cayenne.util.MemoryBlob

- All Implemented Interfaces:
    `Blob`

      public class MemoryBlob
      extends Object
      implements Blob

  A Blob implementation that stores content in memory.

  This implementation is based on jdbcBlob from HSQLDB (copyright HSQL Development Group).

  Since:
    1.2

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `MemoryBlob()` |
    `MemoryBlob​(byte[] data)` | Constructs a new MemoryBlob instance wrapping the given octet sequence.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `free()` |
    `InputStream` | `getBinaryStream()` | Retrieves the `BLOB` value designated by this `Blob` instance as a stream.
    `InputStream` | `getBinaryStream​(long arg0, long arg1)` |
    `byte[]` | `getBytes​(long pos, int length)` | Retrieves all or part of the `BLOB` value that this `Blob` object represents, as an array of bytes.
    `long` | `length()` | Returns the number of bytes in the `BLOB` value designated by this `Blob` object.
    `long` | `position​(byte[] pattern, long start)` | Retrieves the byte position at which the specified byte array `pattern` begins within the `BLOB` value that this `Blob` object represents.
    `long` | `position​(Blob pattern, long start)` | Retrieves the byte position in the `BLOB` value designated by this `Blob` object at which `pattern` begins.
    `OutputStream` | `setBinaryStream​(long pos)` | Always throws an exception.
    `int` | `setBytes​(long pos, byte[] bytes)` | Always throws an exception.
    `int` | `setBytes​(long pos, byte[] bytes, int offset, int len)` | Always throws an exception.
    `void` | `truncate​(long len)` | Truncates the `BLOB` value that this `Blob` object represents to be `len` bytes in length.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### MemoryBlob

          public MemoryBlob()

    - #### MemoryBlob

          public MemoryBlob​(byte[] data)

      Constructs a new MemoryBlob instance wrapping the given octet sequence.
      Parameters:
        `data` - the octet sequence representing the Blob value
      Throws:
        `CayenneRuntimeException` - if the argument is null

  - ### Method Detail

    - #### length

          public long length()
                      throws SQLException

      Returns the number of bytes in the `BLOB` value designated by this `Blob` object.
      Specified by:
        `length` in interface `Blob`
      Returns:
        length of the `BLOB` in bytes
      Throws:
        `SQLException` - if there is an error accessing the length of the `BLOB`

    - #### getBytes

          public byte[] getBytes​(long pos,
                                 int length)
                          throws SQLException

      Retrieves all or part of the `BLOB` value that this `Blob` object represents, as an array of bytes. This `byte` array contains up to `length` consecutive bytes starting at position `pos`.

      The official specification is ambiguous in that it does not precisely indicate the policy to be observed when pos > this.length() - length. One policy would be to retrieve the octets from pos to this.length(). Another would be to throw an exception. This implementation observes the later policy.

      Specified by:
        `getBytes` in interface `Blob`
      Parameters:
        `pos` - the ordinal position of the first byte in the `BLOB` value to be extracted; the first byte is at position 1
        `length` - the number of consecutive bytes to be copied
      Returns:
        a byte array containing up to `length` consecutive bytes from the `BLOB` value designated by this `Blob` object, starting with the byte at position `pos`
      Throws:
        `SQLException` - if there is an error accessing the `BLOB` value

    - #### getBinaryStream

          public InputStream getBinaryStream()
                                      throws SQLException

      Retrieves the `BLOB` value designated by this `Blob` instance as a stream.
      Specified by:
        `getBinaryStream` in interface `Blob`
      Returns:
        a stream containing the `BLOB` data
      Throws:
        `SQLException` - if there is an error accessing the `BLOB` value

    - #### position

          public long position​(byte[] pattern,
                               long start)
                        throws SQLException

      Retrieves the byte position at which the specified byte array `pattern` begins within the `BLOB` value that this `Blob` object represents. The search for `pattern` begins at position `start`.

      Specified by:
        `position` in interface `Blob`
      Parameters:
        `pattern` - the byte array for which to search
        `start` - the position at which to begin searching; the first position is 1
      Returns:
        the position at which the pattern appears, else -1
      Throws:
        `SQLException` - if there is an error accessing the `BLOB`

    - #### position

          public long position​(Blob pattern,
                               long start)
                        throws SQLException

      Retrieves the byte position in the `BLOB` value designated by this `Blob` object at which `pattern` begins. The search begins at position `start`.
      Specified by:
        `position` in interface `Blob`
      Parameters:
        `pattern` - the `Blob` object designating the `BLOB` value for which to search
        `start` - the position in the `BLOB` value at which to begin searching; the first position is 1
      Returns:
        the position at which the pattern begins, else -1
      Throws:
        `SQLException` - if there is an error accessing the `BLOB` value

    - #### setBytes

          public int setBytes​(long pos,
                              byte[] bytes)
                       throws SQLException

      Always throws an exception.
      Specified by:
        `setBytes` in interface `Blob`
      Throws:
        `SQLException`

    - #### setBytes

          public int setBytes​(long pos,
                              byte[] bytes,
                              int offset,
                              int len)
                       throws SQLException

      Always throws an exception.
      Specified by:
        `setBytes` in interface `Blob`
      Throws:
        `SQLException`

    - #### setBinaryStream

          public OutputStream setBinaryStream​(long pos)
                                       throws SQLException

      Always throws an exception.
      Specified by:
        `setBinaryStream` in interface `Blob`
      Throws:
        `SQLException`

    - #### truncate

          public void truncate​(long len)
                        throws SQLException

      Truncates the `BLOB` value that this `Blob` object represents to be `len` bytes in length.
      Specified by:
        `truncate` in interface `Blob`
      Parameters:
        `len` - the length, in bytes, to which the `BLOB` value that this `Blob` object represents should be truncated
      Throws:
        `SQLException` - if there is an error accessing the `BLOB` value

    - #### free

          public void free()
                    throws SQLException

      Specified by:
        `free` in interface `Blob`
      Throws:
        `SQLException`
      Since:
        3.0

    - #### getBinaryStream

          public InputStream getBinaryStream​(long arg0,
                                             long arg1)
                                      throws SQLException

      Specified by:
        `getBinaryStream` in interface `Blob`
      Throws:
        `SQLException`
      Since:
        3.0