uk.ac.starlink.table.storage

## Class LimitByteStore

- java.lang.Object
- - uk.ac.starlink.table.storage.LimitByteStore

- All Implemented Interfaces:
    ByteStore

      public class LimitByteStore
      extends java.lang.Object
      implements ByteStore

  ByteStore wrapper class which will throw an IOException during writing if an attempt is made to store more than a fixed number of bytes.
  Since:
    29 Mar 2011

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `LimitByteStore(ByteStore base, long limit)` Constructor.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()` Tidies up.
    `void` | `copy(java.io.OutputStream out)` Takes all the data written so far into this store's sink stream and copies it to a destination stream.
    `long` | `getLength()` Returns the number of bytes currently stored in this object.
    `java.io.OutputStream` | `getOutputStream()` Returns an output stream which can be used to write to the store.
    `java.nio.ByteBuffer[]` | `toByteBuffers()` Returns an array of byte buffers containing the bytes written to this store.

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

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

- - ### Constructor Detail

    - #### LimitByteStore

          public LimitByteStore(ByteStore base,
                                long limit)

      Constructor.
      Parameters:
        `base` - base byte store
        `limit` - maximum capacity of this store in bytes

  - ### Method Detail

    - #### getOutputStream

          public java.io.OutputStream getOutputStream()

      Description copied from interface: `ByteStore`
      Returns an output stream which can be used to write to the store. May be called multiple times; always returns the same object. Note that this is not in general buffered - it is the responsibility of the user to take steps like wrapping it in a `BufferedOutputStream` for efficiency if required.
      Specified by:
        `getOutputStream` in interface `ByteStore`
      Returns:
        data sink stream

    - #### getLength

          public long getLength()

      Description copied from interface: `ByteStore`
      Returns the number of bytes currently stored in this object.
      Specified by:
        `getLength` in interface `ByteStore`
      Returns:
        byte count

    - #### copy

          public void copy(java.io.OutputStream out)
                    throws java.io.IOException

      Description copied from interface: `ByteStore`
      Takes all the data written so far into this store's sink stream and copies it to a destination stream. The output stream is not closed.
      Specified by:
        `copy` in interface `ByteStore`
      Parameters:
        `out` - data destination stream
      Throws:
        `java.io.IOException`

    - #### toByteBuffers

          public java.nio.ByteBuffer[] toByteBuffers()
                                              throws java.io.IOException

      Description copied from interface: `ByteStore`
      Returns an array of byte buffers containing the bytes written to this store. The stored bytes are all of the bytes from the first buffer in the returned array, followed by all in the second, etc. In many cases the returned array will, and probably should, contain a single buffer, but if the written byte count exceeds `Integer.MAX_VALUE`, more than one will be required. The limit of each buffer indicates the number of bytes it contains.

      Usual usage will be to write all data, then call this method once; this model may affect implementation decisions about efficiency.

      Specified by:
        `toByteBuffers` in interface `ByteStore`
      Returns:
        byte buffer containing bytes written
      Throws:
        `java.io.IOException` - if there is an I/O error

    - #### close

          public void close()

      Description copied from interface: `ByteStore`
      Tidies up. Should be called when the data in this object is no longer required. This object may no longer be usable following a call to this method.
      Specified by:
        `close` in interface `ByteStore`