org.springframework.core.io.buffer

Interface DataBuffer

  • All Known Subinterfaces:
    PooledDataBuffer
    All Known Implementing Classes:
    DefaultDataBuffer, NettyDataBuffer


    public interface DataBuffer
    Basic abstraction over byte buffers.

    DataBuffers has a separate read and write position, as opposed to ByteBuffer's single position. As such, the DataBuffer does not require a flip to read after writing. In general, the following invariant holds for the read and write positions, and the capacity:

    0 <= readPosition <= writePosition <= capacity

    The capacity of a DataBuffer is expanded on demand, similar to StringBuilder.

    The main purpose of the DataBuffer abstraction is to provide a convenient wrapper around ByteBuffer that is similar to Netty's ByteBuf, but that can also be used on non-Netty platforms (i.e. Servlet).

    Since:
    5.0
    Author:
    Arjen Poutsma
    See Also:
    DataBufferFactory
    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method and Description
      java.nio.ByteBuffer asByteBuffer()
      Expose this buffer's bytes as a ByteBuffer.
      java.nio.ByteBuffer asByteBuffer(int index, int length)
      Expose a subsequence of this buffer's bytes as a ByteBuffer.
      java.io.InputStream asInputStream()
      Expose this buffer's data as an InputStream.
      java.io.InputStream asInputStream(boolean releaseOnClose)
      Expose this buffer's data as an InputStream.
      java.io.OutputStream asOutputStream()
      Expose this buffer's data as an OutputStream.
      int capacity()
      Return the number of bytes that this buffer can contain.
      DataBuffer capacity(int capacity)
      Set the number of bytes that this buffer can contain.
      DataBufferFactory factory()
      Return the DataBufferFactory that created this buffer.
      byte getByte(int index)
      Read a single byte at the given index from this data buffer.
      int indexOf(java.util.function.IntPredicate predicate, int fromIndex)
      Return the index of the first byte in this buffer that matches the given predicate.
      int lastIndexOf(java.util.function.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.
      DataBuffer read(byte[] destination)
      Read this buffer's data into the specified destination, starting at the current reading position of this buffer.
      DataBuffer 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.
      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.
      DataBuffer readPosition(int readPosition)
      Set the position from which this buffer will read.
      DataBuffer slice(int index, int length)
      Create a new DataBuffer whose contents is a shared subsequence of this data buffer's content.
      int writableByteCount()
      Return the number of bytes that can be written to this data buffer.
      DataBuffer write(byte b)
      Write a single byte into this buffer at the current writing position.
      DataBuffer write(byte[] source)
      Write the given source into this buffer, startin at the current writing position of this buffer.
      DataBuffer 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.
      DataBuffer write(java.nio.ByteBuffer... buffers)
      Write one or more ByteBuffer to this buffer, starting at the current writing position.
      DataBuffer write(DataBuffer... buffers)
      Write one or more DataBuffers to this buffer, starting at the current writing position.
      int writePosition()
      Return the position to which this buffer will write.
      DataBuffer writePosition(int writePosition)
      Set the position to which this buffer will write.
    • Method Detail

      • indexOf

        int indexOf(java.util.function.IntPredicate predicate,
                    int fromIndex)
        Return the index of the first byte in this buffer that matches the given predicate.
        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

        int lastIndexOf(java.util.function.IntPredicate predicate,
                        int fromIndex)
        Return the index of the last byte in this buffer that matches the given predicate.
        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

        int readableByteCount()
        Return the number of bytes that can be read from this data buffer.
        Returns:
        the readable byte count
      • writableByteCount

        int writableByteCount()
        Return the number of bytes that can be written to this data buffer.
        Returns:
        the writable byte count
        Since:
        5.0.1
      • capacity

        int capacity()
        Return the number of bytes that this buffer can contain.
        Returns:
        the capacity
        Since:
        5.0.1
      • capacity

        DataBuffer capacity(int capacity)
        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.

        Parameters:
        capacity - the new capacity
        Returns:
        this buffer
      • readPosition

        int readPosition()
        Return the position from which this buffer will read.
        Returns:
        the read position
        Since:
        5.0.1
      • readPosition

        DataBuffer readPosition(int readPosition)
        Set the position from which this buffer will read.
        Parameters:
        readPosition - the new read position
        Returns:
        this buffer
        Throws:
        java.lang.IndexOutOfBoundsException - if readPosition is smaller than 0 or greater than writePosition()
        Since:
        5.0.1
      • writePosition

        int writePosition()
        Return the position to which this buffer will write.
        Returns:
        the write position
        Since:
        5.0.1
      • writePosition

        DataBuffer writePosition(int writePosition)
        Set the position to which this buffer will write.
        Parameters:
        writePosition - the new write position
        Returns:
        this buffer
        Throws:
        java.lang.IndexOutOfBoundsException - if writePosition is smaller than readPosition() or greater than capacity()
        Since:
        5.0.1
      • getByte

        byte getByte(int index)
        Read a single byte at the given index from this data buffer.
        Parameters:
        index - the index at which the byte will be read
        Returns:
        the byte at the given index
        Throws:
        java.lang.IndexOutOfBoundsException - when index is out of bounds
        Since:
        5.0.4
      • read

        byte read()
        Read a single byte from the current reading position from this data buffer.
        Returns:
        the byte at this buffer's current reading position
      • read

        DataBuffer read(byte[] destination)
        Read this buffer's data into the specified destination, starting at the current reading position of this buffer.
        Parameters:
        destination - the array into which the bytes are to be written
        Returns:
        this buffer
      • read

        DataBuffer 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.
        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

        DataBuffer write(byte b)
        Write a single byte into this buffer at the current writing position.
        Parameters:
        b - the byte to be written
        Returns:
        this buffer
      • write

        DataBuffer write(byte[] source)
        Write the given source into this buffer, startin at the current writing position of this buffer.
        Parameters:
        source - the bytes to be written into this buffer
        Returns:
        this buffer
      • write

        DataBuffer 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.
        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

        DataBuffer write(DataBuffer... buffers)
        Write one or more DataBuffers to this buffer, starting at the current writing position. It is the responsibility of the caller to release the given data buffers.
        Parameters:
        buffers - the byte buffers to write into this buffer
        Returns:
        this buffer
      • write

        DataBuffer write(java.nio.ByteBuffer... buffers)
        Write one or more ByteBuffer to this buffer, starting at the current writing position.
        Parameters:
        buffers - the byte buffers to write into this buffer
        Returns:
        this buffer
      • slice

        DataBuffer slice(int index,
                         int length)
        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.
        Parameters:
        index - the index at which to start the slice
        length - the length of the slice
        Returns:
        the specified slice of this data buffer
      • asByteBuffer

        java.nio.ByteBuffer asByteBuffer()
        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.
        Returns:
        this data buffer as a byte buffer
      • asByteBuffer

        java.nio.ByteBuffer asByteBuffer(int index,
                                         int length)
        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.
        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
        Since:
        5.0.1
      • asInputStream

        java.io.InputStream asInputStream()
        Expose this buffer's data as an InputStream. 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.
        Returns:
        this data buffer as an input stream
        See Also:
        asInputStream(boolean)
      • asInputStream

        java.io.InputStream asInputStream(boolean releaseOnClose)
        Expose this buffer's data as an InputStream. Both data and read position are shared between the returned stream and this data buffer.
        Parameters:
        releaseOnClose - whether the underlying buffer will be released when the input stream is closed.
        Returns:
        this data buffer as an input stream
        Since:
        5.0.4
      • asOutputStream

        java.io.OutputStream asOutputStream()
        Expose this buffer's data as an OutputStream. Both data and write position are shared between the returned stream and this data buffer.
        Returns:
        this data buffer as an output stream