Top Description Methods
org.eclipse.jgit.internal.storage.dfs

public Interface ReadableChannel

extends ReadableByteChannel
Known Direct Implementers
org.eclipse.jgit.internal.storage.dfs.InMemoryRepository.ByteArrayReadableChannel
Imports
java.io.IOException, java.nio.channels.ReadableByteChannel

Readable random access byte channel from a file.

Method Summary

Modifier and TypeMethod and Description
public int

Returns:

recommended alignment size for randomly positioned reads. Does not need to be a power of 2.
blockSize
()

Get the recommended alignment for reads.

public long

Returns:

r current offset.
position
()

Get the current position of the channel.

public void
position(long
position to move the channel to. The next read will start from here. This should be a multiple of the blockSize().
newPosition
)

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

public void
setReadAheadBytes(int
requested size of the read ahead buffer, in bytes.
bufferSize
)

Recommend the channel maintain a read-ahead buffer.

public long

Returns:

r total size of the channel; -1 if not yet available.
size
()

Get the total size of the channel.

Inherited from java.nio.channels.ReadableByteChannel:
read

Method Detail

blockSizeback to summary
public 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 org.eclipse.jgit.internal.storage.dfs.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:int

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

positionback to summary
public long position() throws IOException

Get the current position of the channel.

Returns:long

r current offset.

Exceptions
IOException:
the channel's current position cannot be obtained.
positionback to summary
public void position(long newPosition) throws IOException

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

Parameters
newPosition:long

position to move the channel to. The next read will start from here. This should be a multiple of the blockSize().

Exceptions
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.
setReadAheadBytesback to summary
public void setReadAheadBytes(int bufferSize) throws IOException

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.

Parameters
bufferSize:int

requested size of the read ahead buffer, in bytes.

Exceptions
IOException:
if the read ahead cannot be adjusted.
sizeback to summary
public 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:long

r total size of the channel; -1 if not yet available.

Exceptions
IOException:
the size cannot be determined.