Package org.springframework.core.io.buffer

# 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 the `DataBuffer` interface that uses a `ByteBuffer` internally. with separate read and write positions. Constructed using the `DefaultDataBufferFactory`.

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`

## Nested Class Summary

## Nested classes/interfaces inherited from interface org.springframework.core.io.buffer.DataBuffer

`DataBuffer.ByteProcessor`

## Method Summary

Modifier and Type
Method
Description
`ByteBuffer`
`asByteBuffer()`
Deprecated.
`ByteBuffer`
`asByteBuffer(int index, int length)`
Deprecated.
`int`
`capacity()`
Return the number of bytes that this buffer can contain.
`DataBuffer`
`capacity(int capacity)`
Deprecated.
`DataBuffer`
`ensureWritable(int length)`
Ensure that the current buffer has enough `DataBuffer.writableByteCount()` to write the amount of data given as an argument.
`boolean`
`equals(Object other)`
`DefaultDataBufferFactory`
`factory()`
Return the `DataBufferFactory` 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 native `ByteBuffer` that this buffer is based on.
`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 most `length` bytes of this buffer into the specified destination, starting at the current reading position of this buffer.
`DataBuffer.ByteBufferIterator`
`readableByteBuffers()`
Returns a closeable iterator over each `ByteBuffer` in this data buffer that can be read.
`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)`
Deprecated.
`DefaultDataBuffer`
`split(int index)`
Splits this data buffer into two at the given index.
`ByteBuffer`
`toByteBuffer(int index, int length)`
Deprecated.
`void`
`toByteBuffer(int srcPos, ByteBuffer dest, int destPos, int length)`
Copies the given length from this data buffer into the given destination `ByteBuffer`, beginning at the given source position, and the given destination position in the destination byte buffer.
`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.
`DataBuffer.ByteBufferIterator`
`writableByteBuffers()`
Returns a closeable iterator over each `ByteBuffer` in this data buffer that can be written to.
`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 most `length` bytes of the given source into this buffer, starting at the current writing position of this buffer.
`DefaultDataBuffer`
`write(ByteBuffer... buffers)`
Write one or more `ByteBuffer` to this buffer, starting at the current writing position.
`DefaultDataBuffer`
`write(DataBuffer... dataBuffers)`
Write one or more `DataBuffer`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

`asInputStream, asInputStream, asOutputStream, ensureCapacity, forEachByte, retainedSlice, toByteBuffer, toByteBuffer, toString, write`

## Method Details

### getNativeBuffer

public ByteBuffer getNativeBuffer()
Directly exposes the native `ByteBuffer` that this buffer is based on. The position of the returned `ByteBuffer` is set to the read position, and the Buffer.limit() to the write position.

Returns:
  the wrapped byte buffer

### factory

public DefaultDataBufferFactory factory()
Description copied from interface: `DataBuffer`
Return the `DataBufferFactory` that created this buffer.

Specified by:
  `factory` in interface `DataBuffer`
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 interface `DataBuffer`
Parameters:
  `predicate` - the predicate to match
  `fromIndex` - 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 interface `DataBuffer`
Parameters:
  `predicate` - the predicate to match
  `fromIndex` - 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 interface `DataBuffer`
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 interface `DataBuffer`
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 interface `DataBuffer`
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 interface `DataBuffer`
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 interface `DataBuffer`
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 interface `DataBuffer`
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 interface `DataBuffer`
Returns:
  the capacity

### capacity

@Deprecated public DataBuffer capacity(int capacity)
Deprecated.
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 interface `DataBuffer`
Parameters:
  `capacity` - the new capacity
Returns:
  this buffer

### ensureWritable

public DataBuffer ensureWritable(int length)
Description copied from interface: `DataBuffer`
Ensure that the current buffer has enough `DataBuffer.writableByteCount()` to write the amount of data given as an argument. If not, the missing capacity will be added to the buffer.

Specified by:
  `ensureWritable` in interface `DataBuffer`
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 interface `DataBuffer`
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 interface `DataBuffer`
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 interface `DataBuffer`
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 most `length` bytes of this buffer into the specified destination, starting at the current reading position of this buffer.

Specified by:
  `read` in interface `DataBuffer`
Parameters:
  `destination` - the array into which the bytes are to be written
  `offset` - the index within `destination` of the first byte to be written
  `length` - the maximum number of bytes to be written in `destination`
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 interface `DataBuffer`
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 interface `DataBuffer`
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 most `length` bytes of the given source into this buffer, starting at the current writing position of this buffer.

Specified by:
  `write` in interface `DataBuffer`
Parameters:
  `source` - the bytes to be written into this buffer
  `offset` - the index within `source` to start writing from
  `length` - the maximum number of bytes to be written from `source`
Returns:
  this buffer

### write

public DefaultDataBuffer write(DataBuffer... dataBuffers)
Description copied from interface: `DataBuffer`
Write one or more `DataBuffer`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 interface `DataBuffer`
Parameters:
  `dataBuffers` - 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 more `ByteBuffer` to this buffer, starting at the current writing position.

Specified by:
  `write` in interface `DataBuffer`
Parameters:
  `buffers` - the byte buffers to write into this buffer
Returns:
  this buffer

### slice

@Deprecated public DefaultDataBuffer slice(int index, int length)
Deprecated.
Description copied from interface: `DataBuffer`
Create a new `DataBuffer` 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 interface `DataBuffer`
Parameters:
  `index` - the index at which to start the slice
  `length` - the length of the slice
Returns:
  the specified slice of this data buffer

### split

public DefaultDataBuffer split(int index)
Description copied from interface: `DataBuffer`
Splits this data buffer into two at the given index.

Data that precedes the `index` will be returned in a new buffer, while this buffer will contain data that follows after `index`. Memory between the two buffers is shared, but independent and cannot overlap (unlike `slice`).

The read and write position of the returned buffer are truncated to fit within the buffers capacity if necessary. The positions of this buffer are set to `0` if they are smaller than `index`.

Specified by:
  `split` in interface `DataBuffer`
Parameters:
  `index` - the index at which it should be split
Returns:
  a new data buffer, containing the bytes from index `0` to `index`

### asByteBuffer

@Deprecated public ByteBuffer asByteBuffer()
Deprecated.
Description copied from interface: `DataBuffer`
Expose this buffer's bytes as a `ByteBuffer`. Data between this `DataBuffer` and the returned `ByteBuffer` 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 interface `DataBuffer`
Returns:
  this data buffer as a byte buffer

### asByteBuffer

@Deprecated public ByteBuffer asByteBuffer(int index, int length)
Deprecated.
Description copied from interface: `DataBuffer`
Expose a subsequence of this buffer's bytes as a `ByteBuffer`. Data between this `DataBuffer` and the returned `ByteBuffer` 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 interface `DataBuffer`
Parameters:
  `index` - the index at which to start the byte buffer
  `length` - the length of the returned byte buffer
Returns:
  this data buffer as a byte buffer

### toByteBuffer

@Deprecated public ByteBuffer toByteBuffer(int index, int length)
Deprecated.
Description copied from interface: `DataBuffer`
Returns a `ByteBuffer` representation of a subsequence of this buffer's bytes. Data between this `DataBuffer` and the returned `ByteBuffer` is not shared.

Specified by:
  `toByteBuffer` in interface `DataBuffer`
Returns:
  this data buffer as a byte buffer
See Also:
  - `DataBuffer.readableByteBuffers()`
  - `DataBuffer.writableByteBuffers()`

### toByteBuffer

public void toByteBuffer(int srcPos, ByteBuffer dest, int destPos, int length)
Description copied from interface: `DataBuffer`
Copies the given length from this data buffer into the given destination `ByteBuffer`, beginning at the given source position, and the given destination position in the destination byte buffer.

Specified by:
  `toByteBuffer` in interface `DataBuffer`
Parameters:
  `srcPos` - the position of this data buffer from where copying should start
  `dest` - the destination byte buffer
  `destPos` - the position in `dest` to where copying should start
  `length` - the amount of data to copy

### readableByteBuffers

public DataBuffer.ByteBufferIterator readableByteBuffers()
Description copied from interface: `DataBuffer`
Returns a closeable iterator over each `ByteBuffer` in this data buffer that can be read. Calling this method is more efficient than `DataBuffer.toByteBuffer()`, as no data is copied. However, the byte buffers provided can only be used during the iteration.

Note that the returned iterator must be used in a try-with-resources clause or explicitly closed.

Specified by:
  `readableByteBuffers` in interface `DataBuffer`
Returns:
  a closeable iterator over the readable byte buffers contained in this data buffer

### writableByteBuffers

public DataBuffer.ByteBufferIterator writableByteBuffers()
Description copied from interface: `DataBuffer`
Returns a closeable iterator over each `ByteBuffer` in this data buffer that can be written to. The byte buffers provided can only be used during the iteration.

Note that the returned iterator must be used in a try-with-resources clause or explicitly closed.

Specified by:
  `writableByteBuffers` in interface `DataBuffer`
Returns:
  a closeable iterator over the writable byte buffers contained in this data buffer

### 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 interface `DataBuffer`
Parameters:
  `index` - the index at which to start the string
  `length` - the number of bytes to use for the string
  `charset` - the charset to use
Returns:
  a string representation of a part of this buffers data

### equals

public boolean equals(@Nullable Object other)

Overrides:
  `equals` in class `Object`

### hashCode

public int hashCode()

Overrides:
  `hashCode` in class `Object`

### toString

public String toString()

Overrides:
  `toString` in class `Object`