# 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

  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 Object

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

- ## Constructor Details

  - ### 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 Details

  - ### 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