Class SeekableInMemoryByteChannel
- All Implemented Interfaces:
Closeable
,AutoCloseable
,ByteChannel
,Channel
,ReadableByteChannel
,SeekableByteChannel
,WritableByteChannel
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
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AtomicBoolean
private byte[]
private static final int
private int
private int
-
Constructor Summary
ConstructorsConstructorDescriptionParameterless constructor - allocates internal buffer by itself.SeekableInMemoryByteChannel
(byte[] data) Constructor taking a byte array.SeekableInMemoryByteChannel
(int size) Constructor taking a size of storage to be allocated. -
Method Summary
Modifier and TypeMethodDescriptionbyte[]
array()
Obtains the array backing this channel.void
close()
private void
boolean
isOpen()
long
position()
Returns this channel's position.position
(long newPosition) int
read
(ByteBuffer buf) private void
resize
(int newLength) long
size()
Returns the current size of entity to which this channel is connected.truncate
(long newSize) Truncates the entity, to which this channel is connected, to the given size.int
write
(ByteBuffer b)
-
Field Details
-
NAIVE_RESIZE_LIMIT
private static final int NAIVE_RESIZE_LIMIT- See Also:
-
data
private byte[] data -
closed
-
position
private int position -
size
private int size
-
-
Constructor Details
-
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 Details
-
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 interfaceSeekableByteChannel
-
position
- Specified by:
position
in interfaceSeekableByteChannel
- Throws:
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 interfaceSeekableByteChannel
-
truncate
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 interfaceSeekableByteChannel
- Throws:
IllegalArgumentException
- if size is negative or bigger than the maximum of a Java integer
-
read
- Specified by:
read
in interfaceReadableByteChannel
- Specified by:
read
in interfaceSeekableByteChannel
- Throws:
IOException
-
close
public void close() -
isOpen
public boolean isOpen() -
write
- Specified by:
write
in interfaceSeekableByteChannel
- Specified by:
write
in interfaceWritableByteChannel
- Throws:
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.
-
resize
private void resize(int newLength) -
ensureOpen
- Throws:
ClosedChannelException
-