Class InMemoryRepository.ByteArrayReadableChannel

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.nio.channels.Channel, java.nio.channels.ReadableByteChannel, ReadableChannel
    Enclosing class:
    InMemoryRepository

    private static class InMemoryRepository.ByteArrayReadableChannel
    extends java.lang.Object
    implements ReadableChannel
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private int blockSize  
      private byte[] data  
      private boolean open  
      private int position  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int blockSize()
      Get the recommended alignment for reads.
      void close()  
      boolean isOpen()  
      long position()
      Get the current position of the channel.
      void position​(long newPosition)
      Seek the current position of the channel to a new offset.
      int read​(java.nio.ByteBuffer dst)  
      void setReadAheadBytes​(int b)
      Recommend the channel maintain a read-ahead buffer.
      long size()
      Get the total size of the channel.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • data

        private final byte[] data
      • blockSize

        private final int blockSize
      • position

        private int position
      • open

        private boolean open
    • Constructor Detail

      • ByteArrayReadableChannel

        ByteArrayReadableChannel​(byte[] buf,
                                 int blockSize)
    • Method Detail

      • read

        public int read​(java.nio.ByteBuffer dst)
        Specified by:
        read in interface java.nio.channels.ReadableByteChannel
      • 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
      • position

        public long position()
        Description copied from interface: ReadableChannel
        Get the current position of the channel.
        Specified by:
        position in interface ReadableChannel
        Returns:
        r current offset.
      • position

        public void position​(long newPosition)
        Description copied from interface: ReadableChannel
        Seek the current position of the channel to a new offset.
        Specified by:
        position in interface ReadableChannel
        Parameters:
        newPosition - position to move the channel to. The next read will start from here. This should be a multiple of the ReadableChannel.blockSize().
      • size

        public long size()
        Description copied from interface: ReadableChannel
        Get the total size of the channel.

        Prior to reading from a channel the size might not yet be known. Implementors may return -1 until after the first read method call. Once a read has been completed, the underlying file size should be available.

        Specified by:
        size in interface ReadableChannel
        Returns:
        r total size of the channel; -1 if not yet available.
      • blockSize

        public int blockSize()
        Description copied from interface: ReadableChannel
        Get the recommended alignment for reads.

        Starting a read at multiples of the blockSize is more efficient than starting a read at any other position. If 0 or -1 the channel does not have any specific block size recommendation.

        Channels should not recommend large block sizes. Sizes up to 1-4 MiB may be reasonable, but sizes above that may be horribly inefficient. The DfsBlockCache favors the alignment suggested by the channel rather than the configured size under the assumption that reads are very expensive and the channel knows what size is best to access it with.

        Specified by:
        blockSize in interface ReadableChannel
        Returns:
        recommended alignment size for randomly positioned reads. Does not need to be a power of 2.
      • setReadAheadBytes

        public void setReadAheadBytes​(int b)
        Description copied from interface: ReadableChannel
        Recommend the channel maintain a read-ahead buffer.

        A read-ahead buffer of approximately bufferSize in bytes may be allocated and used by the channel to smooth out latency for read.

        Callers can continue to read in smaller than bufferSize chunks. With read-ahead buffering enabled read latency may fluctuate in a pattern of one slower read followed by (bufferSize / readSize) - 1 fast reads satisfied by the read-ahead buffer. When summed up overall time to read the same contiguous range should be lower than if read-ahead was not enabled, as the implementation can combine reads to increase throughput.

        To avoid unnecessary IO callers should only enable read-ahead if the majority of the channel will be accessed in order.

        Implementations may chose to read-ahead using asynchronous APIs or background threads, or may simply aggregate reads using a buffer.

        This read ahead stays in effect until the channel is closed or the buffer size is set to 0.

        Specified by:
        setReadAheadBytes in interface ReadableChannel
        Parameters:
        b - requested size of the read ahead buffer, in bytes.