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

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and 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 Detail

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

      Parameterless constructor - allocates internal buffer by itself.

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

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

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

    - #### read

          public int read(ByteBuffer buf)
                   throws IOException

      Specified by:
        `read` in interface `ReadableByteChannel`
      Specified by:
        `read` in interface `SeekableByteChannel`
      Throws:
        `IOException`

    - #### close

          public void close()

      Specified by:
        `close` in interface `Closeable`
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `Channel`

    - #### isOpen

          public boolean isOpen()

      Specified by:
        `isOpen` in interface `Channel`

    - #### write

          public int write(ByteBuffer b)
                    throws IOException

      Specified by:
        `write` in interface `SeekableByteChannel`
      Specified by:
        `write` in interface `WritableByteChannel`
      Throws:
        `IOException`

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

Copyright © 2002–2020 The Apache Software Foundation. All rights reserved.