Class InMemoryRepository.ByteArrayReadableChannel
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Channel
,ReadableByteChannel
,ReadableChannel
- Enclosing class:
- InMemoryRepository
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint
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
(ByteBuffer dst) void
setReadAheadBytes
(int b) Recommend the channel maintain a read-ahead buffer.long
size()
Get the total size of the channel.
-
Field Details
-
data
private final byte[] data -
blockSize
private final int blockSize -
position
private int position -
open
private boolean open
-
-
Constructor Details
-
ByteArrayReadableChannel
ByteArrayReadableChannel(byte[] buf, int blockSize)
-
-
Method Details
-
read
- Specified by:
read
in interfaceReadableByteChannel
-
close
public void close() -
isOpen
public boolean isOpen() -
position
public long position()Description copied from interface:ReadableChannel
Get the current position of the channel.- Specified by:
position
in interfaceReadableChannel
- 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 interfaceReadableChannel
- Parameters:
newPosition
- position to move the channel to. The next read will start from here. This should be a multiple of theReadableChannel.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 interfaceReadableChannel
- 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 interfaceReadableChannel
- 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 interfaceReadableChannel
- Parameters:
b
- requested size of the read ahead buffer, in bytes.
-