Class DefaultDataBuffer
- java.lang.Object
- org.springframework.core.io.buffer.DefaultDataBuffer
- All Implemented Interfaces:
DataBuffer
public class DefaultDataBuffer extends Object implements DataBuffer
Default implementation of theDataBuffer
interface that uses aByteBuffer
internally. with separate read and write positions. Constructed using theDefaultDataBufferFactory
.Inspired by Netty's
ByteBuf
. Introduced so that non-Netty runtimes (i.e. Servlet) do not require Netty on the classpath.- Since:
- 5.0
- Author:
- Arjen Poutsma, Juergen Hoeller, Brian Clozel
- See Also:
DefaultDataBufferFactory
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ByteBuffer
asByteBuffer()
Expose this buffer's bytes as aByteBuffer
.ByteBuffer
asByteBuffer(int index, int length)
Expose a subsequence of this buffer's bytes as aByteBuffer
.InputStream
asInputStream()
Expose this buffer's data as anInputStream
.InputStream
asInputStream(boolean releaseOnClose)
Expose this buffer's data as anInputStream
.OutputStream
asOutputStream()
Expose this buffer's data as anOutputStream
.int
capacity()
Return the number of bytes that this buffer can contain.DefaultDataBuffer
capacity(int newCapacity)
Set the number of bytes that this buffer can contain.DataBuffer
ensureCapacity(int length)
Ensure that the current buffer has enoughDataBuffer.writableByteCount()
to write the amount of data given as an argument.boolean
equals(Object other)
DefaultDataBufferFactory
factory()
Return theDataBufferFactory
that created this buffer.byte
getByte(int index)
Read a single byte at the given index from this data buffer.ByteBuffer
getNativeBuffer()
Directly exposes the nativeByteBuffer
that this buffer is based on also updating theByteBuffer's
position and limit to match the currentreadPosition()
andreadableByteCount()
.int
hashCode()
int
indexOf(IntPredicate predicate, int fromIndex)
Return the index of the first byte in this buffer that matches the given predicate.int
lastIndexOf(IntPredicate predicate, int fromIndex)
Return the index of the last byte in this buffer that matches the given predicate.byte
read()
Read a single byte from the current reading position from this data buffer.DefaultDataBuffer
read(byte[] destination)
Read this buffer's data into the specified destination, starting at the current reading position of this buffer.DefaultDataBuffer
read(byte[] destination, int offset, int length)
Read at mostlength
bytes of this buffer into the specified destination, starting at the current reading position of this buffer.int
readableByteCount()
Return the number of bytes that can be read from this data buffer.int
readPosition()
Return the position from which this buffer will read.DefaultDataBuffer
readPosition(int readPosition)
Set the position from which this buffer will read.DefaultDataBuffer
slice(int index, int length)
Create a newDataBuffer
whose contents is a shared subsequence of this data buffer's content.String
toString()
String
toString(int index, int length, Charset charset)
Return a part of this buffer's data as a String using the specified charset.int
writableByteCount()
Return the number of bytes that can be written to this data buffer.DefaultDataBuffer
write(byte b)
Write a single byte into this buffer at the current writing position.DefaultDataBuffer
write(byte[] source)
Write the given source into this buffer, starting at the current writing position of this buffer.DefaultDataBuffer
write(byte[] source, int offset, int length)
Write at mostlength
bytes of the given source into this buffer, starting at the current writing position of this buffer.DefaultDataBuffer
write(ByteBuffer... buffers)
Write one or moreByteBuffer
to this buffer, starting at the current writing position.DefaultDataBuffer
write(DataBuffer... buffers)
Write one or moreDataBuffer
s to this buffer, starting at the current writing position.int
writePosition()
Return the position to which this buffer will write.DefaultDataBuffer
writePosition(int writePosition)
Set the position to which this buffer will write.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.core.io.buffer.DataBuffer
retainedSlice, toString, write
Method Detail
getNativeBuffer
public ByteBuffer getNativeBuffer()
Directly exposes the nativeByteBuffer
that this buffer is based on also updating theByteBuffer's
position and limit to match the currentreadPosition()
andreadableByteCount()
.- Returns:
- the wrapped byte buffer
factory
public DefaultDataBufferFactory factory()
Description copied from interface:DataBuffer
Return theDataBufferFactory
that created this buffer.- Specified by:
factory
in interfaceDataBuffer
- Returns:
- the creating buffer factory
indexOf
public int indexOf(IntPredicate predicate, int fromIndex)
Description copied from interface:DataBuffer
Return the index of the first byte in this buffer that matches the given predicate.- Specified by:
indexOf
in interfaceDataBuffer
- Parameters:
predicate
- the predicate to matchfromIndex
- the index to start the search from- Returns:
- the index of the first byte that matches
predicate
; or-1
if none match
lastIndexOf
public int lastIndexOf(IntPredicate predicate, int fromIndex)
Description copied from interface:DataBuffer
Return the index of the last byte in this buffer that matches the given predicate.- Specified by:
lastIndexOf
in interfaceDataBuffer
- Parameters:
predicate
- the predicate to matchfromIndex
- the index to start the search from- Returns:
- the index of the last byte that matches
predicate
; or-1
if none match
readableByteCount
public int readableByteCount()
Description copied from interface:DataBuffer
Return the number of bytes that can be read from this data buffer.- Specified by:
readableByteCount
in interfaceDataBuffer
- Returns:
- the readable byte count
writableByteCount
public int writableByteCount()
Description copied from interface:DataBuffer
Return the number of bytes that can be written to this data buffer.- Specified by:
writableByteCount
in interfaceDataBuffer
- Returns:
- the writable byte count
readPosition
public int readPosition()
Description copied from interface:DataBuffer
Return the position from which this buffer will read.- Specified by:
readPosition
in interfaceDataBuffer
- Returns:
- the read position
readPosition
public DefaultDataBuffer readPosition(int readPosition)
Description copied from interface:DataBuffer
Set the position from which this buffer will read.- Specified by:
readPosition
in interfaceDataBuffer
- Parameters:
readPosition
- the new read position- Returns:
- this buffer
writePosition
public int writePosition()
Description copied from interface:DataBuffer
Return the position to which this buffer will write.- Specified by:
writePosition
in interfaceDataBuffer
- Returns:
- the write position
writePosition
public DefaultDataBuffer writePosition(int writePosition)
Description copied from interface:DataBuffer
Set the position to which this buffer will write.- Specified by:
writePosition
in interfaceDataBuffer
- Parameters:
writePosition
- the new write position- Returns:
- this buffer
capacity
public int capacity()
Description copied from interface:DataBuffer
Return the number of bytes that this buffer can contain.- Specified by:
capacity
in interfaceDataBuffer
- Returns:
- the capacity
capacity
public DefaultDataBuffer capacity(int newCapacity)
Description copied from interface:DataBuffer
Set the number of bytes that this buffer can contain.If the new capacity is lower than the current capacity, the contents of this buffer will be truncated. If the new capacity is higher than the current capacity, it will be expanded.
- Specified by:
capacity
in interfaceDataBuffer
- Parameters:
newCapacity
- the new capacity- Returns:
- this buffer
ensureCapacity
public DataBuffer ensureCapacity(int length)
Description copied from interface:DataBuffer
Ensure that the current buffer has enoughDataBuffer.writableByteCount()
to write the amount of data given as an argument. If not, the missing capacity will be added to the buffer.- Specified by:
ensureCapacity
in interfaceDataBuffer
- Parameters:
length
- the writable capacity to check for- Returns:
- this buffer
getByte
public byte getByte(int index)
Description copied from interface:DataBuffer
Read a single byte at the given index from this data buffer.- Specified by:
getByte
in interfaceDataBuffer
- Parameters:
index
- the index at which the byte will be read- Returns:
- the byte at the given index
read
public byte read()
Description copied from interface:DataBuffer
Read a single byte from the current reading position from this data buffer.- Specified by:
read
in interfaceDataBuffer
- Returns:
- the byte at this buffer's current reading position
read
public DefaultDataBuffer read(byte[] destination)
Description copied from interface:DataBuffer
Read this buffer's data into the specified destination, starting at the current reading position of this buffer.- Specified by:
read
in interfaceDataBuffer
- Parameters:
destination
- the array into which the bytes are to be written- Returns:
- this buffer
read
public DefaultDataBuffer read(byte[] destination, int offset, int length)
Description copied from interface:DataBuffer
Read at mostlength
bytes of this buffer into the specified destination, starting at the current reading position of this buffer.- Specified by:
read
in interfaceDataBuffer
- Parameters:
destination
- the array into which the bytes are to be writtenoffset
- the index withindestination
of the first byte to be writtenlength
- the maximum number of bytes to be written indestination
- Returns:
- this buffer
write
public DefaultDataBuffer write(byte b)
Description copied from interface:DataBuffer
Write a single byte into this buffer at the current writing position.- Specified by:
write
in interfaceDataBuffer
- Parameters:
b
- the byte to be written- Returns:
- this buffer
write
public DefaultDataBuffer write(byte[] source)
Description copied from interface:DataBuffer
Write the given source into this buffer, starting at the current writing position of this buffer.- Specified by:
write
in interfaceDataBuffer
- Parameters:
source
- the bytes to be written into this buffer- Returns:
- this buffer
write
public DefaultDataBuffer write(byte[] source, int offset, int length)
Description copied from interface:DataBuffer
Write at mostlength
bytes of the given source into this buffer, starting at the current writing position of this buffer.- Specified by:
write
in interfaceDataBuffer
- Parameters:
source
- the bytes to be written into this bufferoffset
- the index withinsource
to start writing fromlength
- the maximum number of bytes to be written fromsource
- Returns:
- this buffer
write
public DefaultDataBuffer write(DataBuffer... buffers)
Description copied from interface:DataBuffer
Write one or moreDataBuffer
s to this buffer, starting at the current writing position. It is the responsibility of the caller to release the given data buffers.- Specified by:
write
in interfaceDataBuffer
- Parameters:
buffers
- the byte buffers to write into this buffer- Returns:
- this buffer
write
public DefaultDataBuffer write(ByteBuffer... buffers)
Description copied from interface:DataBuffer
Write one or moreByteBuffer
to this buffer, starting at the current writing position.- Specified by:
write
in interfaceDataBuffer
- Parameters:
buffers
- the byte buffers to write into this buffer- Returns:
- this buffer
slice
public DefaultDataBuffer slice(int index, int length)
Description copied from interface:DataBuffer
Create a newDataBuffer
whose contents is a shared subsequence of this data buffer's content. Data between this data buffer and the returned buffer is shared; though changes in the returned buffer's position will not be reflected in the reading nor writing position of this data buffer.Note that this method will not call
DataBufferUtils.retain(DataBuffer)
on the resulting slice: the reference count will not be increased.- Specified by:
slice
in interfaceDataBuffer
- Parameters:
index
- the index at which to start the slicelength
- the length of the slice- Returns:
- the specified slice of this data buffer
asByteBuffer
public ByteBuffer asByteBuffer()
Description copied from interface:DataBuffer
Expose this buffer's bytes as aByteBuffer
. Data between thisDataBuffer
and the returnedByteBuffer
is shared; though changes in the returned buffer's position will not be reflected in the reading nor writing position of this data buffer.- Specified by:
asByteBuffer
in interfaceDataBuffer
- Returns:
- this data buffer as a byte buffer
asByteBuffer
public ByteBuffer asByteBuffer(int index, int length)
Description copied from interface:DataBuffer
Expose a subsequence of this buffer's bytes as aByteBuffer
. Data between thisDataBuffer
and the returnedByteBuffer
is shared; though changes in the returned buffer's position will not be reflected in the reading nor writing position of this data buffer.- Specified by:
asByteBuffer
in interfaceDataBuffer
- Parameters:
index
- the index at which to start the byte bufferlength
- the length of the returned byte buffer- Returns:
- this data buffer as a byte buffer
asInputStream
public InputStream asInputStream()
Description copied from interface:DataBuffer
Expose this buffer's data as anInputStream
. Both data and read position are shared between the returned stream and this data buffer. The underlying buffer will not be released when the input stream is closed.- Specified by:
asInputStream
in interfaceDataBuffer
- Returns:
- this data buffer as an input stream
- See Also:
DataBuffer.asInputStream(boolean)
asInputStream
public InputStream asInputStream(boolean releaseOnClose)
Description copied from interface:DataBuffer
Expose this buffer's data as anInputStream
. Both data and read position are shared between the returned stream and this data buffer.- Specified by:
asInputStream
in interfaceDataBuffer
- Parameters:
releaseOnClose
- whether the underlying buffer will be released when the input stream is closed.- Returns:
- this data buffer as an input stream
asOutputStream
public OutputStream asOutputStream()
Description copied from interface:DataBuffer
Expose this buffer's data as anOutputStream
. Both data and write position are shared between the returned stream and this data buffer.- Specified by:
asOutputStream
in interfaceDataBuffer
- Returns:
- this data buffer as an output stream
toString
public String toString(int index, int length, Charset charset)
Description copied from interface:DataBuffer
Return a part of this buffer's data as a String using the specified charset.- Specified by:
toString
in interfaceDataBuffer
- Parameters:
index
- the index at which to start the stringlength
- the number of bytes to use for the stringcharset
- the charset to use- Returns:
- a string representation of a part of this buffers data