Class IovArray

  • All Implemented Interfaces:
    io.netty.channel.ChannelOutboundBuffer.MessageProcessor

    public final class IovArray
    extends Object
    implements io.netty.channel.ChannelOutboundBuffer.MessageProcessor
    Represent an array of struct array and so can be passed directly over via JNI without the need to do any more array copies. The buffers are written out directly into direct memory to match the struct iov. See also man writev.
     struct iovec {
       void  *iov_base;
       size_t iov_len;
     };
     
    See also Efficient JNI programming IV: Wrapping native data objects.
    • Field Detail

      • IOV_SIZE

        public static final int IOV_SIZE
        The size of an iovec struct in bytes. This is calculated as we have 2 entries each of the size of the address.
    • Constructor Detail

      • IovArray

        public IovArray​(int numEntries)
        Allocate an IovArray with enough room for the given number of entries (not bytes).
        Parameters:
        numEntries - The desired number of entries in the IovArray.
      • IovArray

        @Deprecated
        public IovArray​(io.netty.buffer.ByteBuf memory)
        Deprecated.
        Use IovArray(int) instead.
        Parameters:
        memory - The underlying memory.
    • Method Detail

      • clear

        public void clear()
      • add

        public boolean add​(io.netty.buffer.ByteBuf buf,
                           int offset,
                           int len)
      • isFull

        public boolean isFull()
        Return true if there is no more space left in the IovArray.
        Returns:
        full or not.
      • count

        public int count()
        Returns the number if iov entries.
      • size

        public long size()
        Returns the size in bytes
      • maxBytes

        public void maxBytes​(long maxBytes)
        Set the maximum amount of bytes that can be added to this IovArray via add(ByteBuf, int, int)

        This will not impact the existing state of the IovArray, and only applies to subsequent calls to add(ByteBuf).

        In order to ensure some progress is made at least one ByteBuf will be accepted even if it's size exceeds this value.

        Parameters:
        maxBytes - the maximum amount of bytes that can be added to this IovArray.
      • maxCount

        public void maxCount​(int maxCount)
        Set the maximum amount of buffers that can be added to this IovArray via add(ByteBuf, int, int)

        This will not impact the existing state of the IovArray, and only applies to subsequent calls to add(ByteBuf).

        Parameters:
        maxCount - the maximum amount of bytes that can be added to this IovArray.
      • maxBytes

        public long maxBytes()
        Get the maximum amount of bytes that can be added to this IovArray.
        Returns:
        the maximum amount of bytes that can be added to this IovArray.
      • maxCount

        public int maxCount()
        Get the maximum amount of buffers that can be added to this IovArray.
        Returns:
        the maximum amount of buffers that can be added to this IovArray.
      • memoryAddress

        public long memoryAddress​(int offset)
        Returns the memoryAddress for the given offset.
      • release

        public void release()
        Release the IovArray. Once release further using of it may crash the JVM!
      • processMessage

        public boolean processMessage​(Object msg)
                               throws Exception
        Specified by:
        processMessage in interface io.netty.channel.ChannelOutboundBuffer.MessageProcessor
        Throws:
        Exception