org.eclipse.jgit.internal.storage.dfs

## Interface ReadableChannel

All Superinterfaces:
  AutoCloseable, Channel, Closeable, ReadableByteChannel

    public interface ReadableChannel
    extends ReadableByteChannel

Readable random access byte channel from a file.

### Method Summary

All Methods Instance Methods Abstract Methods
`int` `blockSize()` Get the recommended alignment for reads.
`long` `position()` Get the current position of the channel.
`void` `position(long newPosition)` Seek the current position of the channel to a new offset.
`long` `size()` Get the total size of the channel.

### Methods inherited from interface java.nio.channels.ReadableByteChannel

`read`

### Methods inherited from interface java.nio.channels.Channel

`close, isOpen`

### Method Detail

#### position

    long position()
           throws IOException

Get the current position of the channel.

Returns:
  r current offset.
Throws:
  `IOException` - the channel's current position cannot be obtained.

#### position

    void position(long newPosition)
           throws IOException

Seek the current position of the channel to a new offset.

Parameters:
  `newPosition` - position to move the channel to. The next read will start from here. This should be a multiple of the `blockSize()`.
Throws:
  `IOException` - the position cannot be updated. This may be because the channel only supports block aligned IO and the current position is not block aligned.

#### size

    long size()
       throws IOException

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.

Returns:
  r total size of the channel; -1 if not yet available.
Throws:
  `IOException` - the size cannot be determined.

#### blockSize

    int blockSize()

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.

Returns:
  recommended alignment size for randomly positioned reads. Does not need to be a power of 2.