Class VIntCoding


  • public class VIntCoding
    extends java.lang.Object
    Borrows idea from https://developers.google.com/protocol-buffers/docs/encoding#varints
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected static io.netty.util.concurrent.FastThreadLocal<byte[]> encodingBuffer  
      static int MAX_SIZE  
    • Constructor Summary

      Constructors 
      Constructor Description
      VIntCoding()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static int computeUnsignedVIntSize​(long value)
      Compute the number of bytes that would be needed to encode an unsigned varint.
      static int computeUnsignedVIntSize​(java.nio.ByteBuffer input, int readerIndex)
      Computes size of an unsigned vint that starts at readerIndex of the provided ByteBuf.
      static int computeUnsignedVIntSize​(java.nio.ByteBuffer input, int readerIndex, int readerLimit)  
      static int computeVIntSize​(long param)
      Compute the number of bytes that would be needed to encode a varint.
      static long decodeZigZag64​(long n)
      Decode a ZigZag-encoded 64-bit value.
      static int encodeExtraBytesToRead​(int extraBytesToRead)  
      static long encodeZigZag64​(long n)
      Encode a ZigZag-encoded 64-bit value.
      static int firstByteValueMask​(int extraBytesToRead)  
      static long getUnsignedVInt​(java.nio.ByteBuffer input, int readerIndex)
      Note this method is the same as readUnsignedVInt(DataInput), except that we do *not* block if there are not enough bytes in the buffer to reconstruct the value.
      static long getUnsignedVInt​(java.nio.ByteBuffer input, int readerIndex, int readerLimit)  
      static int numberOfExtraBytesToRead​(int firstByte)  
      static long readUnsignedVInt​(java.io.DataInput input)  
      static long readVInt​(java.io.DataInput input)  
      static void skipUnsignedVInt​(DataInputPlus input)  
      static void writeUnsignedVInt​(long value, java.io.DataOutput output)  
      static void writeUnsignedVInt​(long value, java.nio.ByteBuffer output)  
      static void writeVInt​(long value, java.io.DataOutput output)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • encodingBuffer

        protected static final io.netty.util.concurrent.FastThreadLocal<byte[]> encodingBuffer
    • Constructor Detail

      • VIntCoding

        public VIntCoding()
    • Method Detail

      • readUnsignedVInt

        public static long readUnsignedVInt​(java.io.DataInput input)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • skipUnsignedVInt

        public static void skipUnsignedVInt​(DataInputPlus input)
                                     throws java.io.IOException
        Throws:
        java.io.IOException
      • getUnsignedVInt

        public static long getUnsignedVInt​(java.nio.ByteBuffer input,
                                           int readerIndex)
        Note this method is the same as readUnsignedVInt(DataInput), except that we do *not* block if there are not enough bytes in the buffer to reconstruct the value. WARNING: this method is only safe for vints we know to be representable by a positive long value.
        Returns:
        -1 if there are not enough bytes in the input to read the value; else, the vint unsigned value.
      • getUnsignedVInt

        public static long getUnsignedVInt​(java.nio.ByteBuffer input,
                                           int readerIndex,
                                           int readerLimit)
      • computeUnsignedVIntSize

        public static int computeUnsignedVIntSize​(java.nio.ByteBuffer input,
                                                  int readerIndex)
        Computes size of an unsigned vint that starts at readerIndex of the provided ByteBuf.
        Returns:
        -1 if there are not enough bytes in the input to calculate the size; else, the vint unsigned value size in bytes.
      • computeUnsignedVIntSize

        public static int computeUnsignedVIntSize​(java.nio.ByteBuffer input,
                                                  int readerIndex,
                                                  int readerLimit)
      • readVInt

        public static long readVInt​(java.io.DataInput input)
                             throws java.io.IOException
        Throws:
        java.io.IOException
      • firstByteValueMask

        public static int firstByteValueMask​(int extraBytesToRead)
      • encodeExtraBytesToRead

        public static int encodeExtraBytesToRead​(int extraBytesToRead)
      • numberOfExtraBytesToRead

        public static int numberOfExtraBytesToRead​(int firstByte)
      • writeUnsignedVInt

        @Inline
        public static void writeUnsignedVInt​(long value,
                                             java.io.DataOutput output)
                                      throws java.io.IOException
        Throws:
        java.io.IOException
      • writeUnsignedVInt

        @Inline
        public static void writeUnsignedVInt​(long value,
                                             java.nio.ByteBuffer output)
      • writeVInt

        @Inline
        public static void writeVInt​(long value,
                                     java.io.DataOutput output)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • decodeZigZag64

        public static long decodeZigZag64​(long n)
        Decode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers into values that can be efficiently encoded with varint. (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, thus always taking 10 bytes on the wire.)
        Parameters:
        n - An unsigned 64-bit integer, stored in a signed int because Java has no explicit unsigned support.
        Returns:
        A signed 64-bit integer.
      • encodeZigZag64

        public static long encodeZigZag64​(long n)
        Encode a ZigZag-encoded 64-bit value. ZigZag encodes signed integers into values that can be efficiently encoded with varint. (Otherwise, negative values must be sign-extended to 64 bits to be varint encoded, thus always taking 10 bytes on the wire.)
        Parameters:
        n - A signed 64-bit integer.
        Returns:
        An unsigned 64-bit integer, stored in a signed int because Java has no explicit unsigned support.
      • computeVIntSize

        public static int computeVIntSize​(long param)
        Compute the number of bytes that would be needed to encode a varint.
      • computeUnsignedVIntSize

        public static int computeUnsignedVIntSize​(long value)
        Compute the number of bytes that would be needed to encode an unsigned varint.