Package org.apache.commons.compress.utils

# Class SeekableInMemoryByteChannel

java.lang.Object
org.apache.commons.compress.utils.SeekableInMemoryByteChannel

All Implemented Interfaces:
  `Closeable`, `AutoCloseable`, `ByteChannel`, `Channel`, `ReadableByteChannel`, `SeekableByteChannel`, `WritableByteChannel`

public class SeekableInMemoryByteChannel extends Object implements SeekableByteChannel
A `SeekableByteChannel` implementation that wraps a byte[].

When this channel is used for writing an internal buffer grows to accommodate incoming data. The natural size limit is the value of `Integer.MAX_VALUE` and it is not possible to `set the position` or `truncate` to a value bigger than that. Internal buffer can be accessed via `array()`.

Since:
  1.13
This class is not thread-safe

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SeekableInMemoryByteChannel()`
  Parameterless constructor - allocates internal buffer by itself.
  `SeekableInMemoryByteChannel(byte[] data)`
  Constructor taking a byte array.
  `SeekableInMemoryByteChannel(int size)`
  Constructor taking a size of storage to be allocated.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `byte[]`
  `array()`
  Obtains the array backing this channel.
  `void`
  `close()`
  `boolean`
  `isOpen()`
  `long`
  `position()`
  Returns this channel's position.
  `SeekableByteChannel`
  `position(long newPosition)`
  `int`
  `read(ByteBuffer buf)`
  `long`
  `size()`
  Returns the current size of entity to which this channel is connected.
  `SeekableByteChannel`
  `truncate(long newSize)`
  Truncates the entity, to which this channel is connected, to the given size.
  `int`
  `write(ByteBuffer b)`

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

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

- ## Constructor Details

  - ### SeekableInMemoryByteChannel

    public SeekableInMemoryByteChannel()
    Parameterless constructor - allocates internal buffer by itself.

  - ### SeekableInMemoryByteChannel

    public SeekableInMemoryByteChannel(byte[] data)
    Constructor taking a byte array.

    This constructor is intended to be used with pre-allocated buffer or when reading from a given byte array.

    Parameters:
      `data` - input data or pre-allocated array.

  - ### SeekableInMemoryByteChannel

    public SeekableInMemoryByteChannel(int size)
    Constructor taking a size of storage to be allocated.

    Creates a channel and allocates internal storage of a given size.

    Parameters:
      `size` - size of internal buffer to allocate, in bytes.

- ## Method Details

  - ### array

    public byte[] array()
    Obtains the array backing this channel.

    NOTE: The returned buffer is not aligned with containing data, use `size()` to obtain the size of data stored in the buffer.

    Returns:
      internal byte array.

  - ### close

    public void close()
    Specified by:
      `close` in interface `AutoCloseable`
    Specified by:
      `close` in interface `Channel`
    Specified by:
      `close` in interface `Closeable`

  - ### isOpen

    public boolean isOpen()
    Specified by:
      `isOpen` in interface `Channel`

  - ### position

    public long position()
    Returns this channel's position.

    This method violates the contract of `SeekableByteChannel.position()` as it will not throw any exception when invoked on a closed channel. Instead it will return the position the channel had when close has been called.

    Specified by:
      `position` in interface `SeekableByteChannel`

  - ### position

    public SeekableByteChannel position(long newPosition) throws IOException
    Specified by:
      `position` in interface `SeekableByteChannel`
    Throws:
      `IOException`

  - ### read

    public int read(ByteBuffer buf) throws IOException
    Specified by:
      `read` in interface `ReadableByteChannel`
    Specified by:
      `read` in interface `SeekableByteChannel`
    Throws:
      `IOException`

  - ### size

    public long size()
    Returns the current size of entity to which this channel is connected.

    This method violates the contract of `SeekableByteChannel.size()` as it will not throw any exception when invoked on a closed channel. Instead it will return the size the channel had when close has been called.

    Specified by:
      `size` in interface `SeekableByteChannel`

  - ### truncate

    public SeekableByteChannel truncate(long newSize)
    Truncates the entity, to which this channel is connected, to the given size.

    This method violates the contract of `SeekableByteChannel.truncate(long)` as it will not throw any exception when invoked on a closed channel.

    Specified by:
      `truncate` in interface `SeekableByteChannel`
    Throws:
      `IllegalArgumentException` - if size is negative or bigger than the maximum of a Java integer

  - ### write

    public int write(ByteBuffer b) throws IOException
    Specified by:
      `write` in interface `SeekableByteChannel`
    Specified by:
      `write` in interface `WritableByteChannel`
    Throws:
      `IOException`