Class SeekableInMemoryByteChannel

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.nio.channels.ByteChannel, java.nio.channels.Channel, java.nio.channels.ReadableByteChannel, java.nio.channels.SeekableByteChannel, java.nio.channels.WritableByteChannel

    public class SeekableInMemoryByteChannel
    extends java.lang.Object
    implements java.nio.channels.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
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      byte[] array()
      Obtains the array backing this channel.
      void close()  
      boolean isOpen()  
      long position()
      Returns this channel's position.
      java.nio.channels.SeekableByteChannel position​(long newPosition)  
      int read​(java.nio.ByteBuffer buf)  
      long size()
      Returns the current size of entity to which this channel is connected.
      java.nio.channels.SeekableByteChannel truncate​(long newSize)
      Truncates the entity, to which this channel is connected, to the given size.
      int write​(java.nio.ByteBuffer b)  
      • Methods inherited from class java.lang.Object

        equals, 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 java.nio.channels.SeekableByteChannel
      • position

        public java.nio.channels.SeekableByteChannel position​(long newPosition)
                                                       throws java.io.IOException
        Specified by:
        position in interface java.nio.channels.SeekableByteChannel
        Throws:
        java.io.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 java.nio.channels.SeekableByteChannel
      • truncate

        public java.nio.channels.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 java.nio.channels.SeekableByteChannel
        Throws:
        java.lang.IllegalArgumentException - if size is negative or bigger than the maximum of a Java integer
      • read

        public int read​(java.nio.ByteBuffer buf)
                 throws java.io.IOException
        Specified by:
        read in interface java.nio.channels.ReadableByteChannel
        Specified by:
        read in interface java.nio.channels.SeekableByteChannel
        Throws:
        java.io.IOException
      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.nio.channels.Channel
        Specified by:
        close in interface java.io.Closeable
      • isOpen

        public boolean isOpen()
        Specified by:
        isOpen in interface java.nio.channels.Channel
      • write

        public int write​(java.nio.ByteBuffer b)
                  throws java.io.IOException
        Specified by:
        write in interface java.nio.channels.SeekableByteChannel
        Specified by:
        write in interface java.nio.channels.WritableByteChannel
        Throws:
        java.io.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.