public final class ImmutableByteSequence extends Object
BIG_ENDIAN order.
 
 Sequences can be created copying from an already existing representation of a
 sequence of bytes, such as ByteBuffer or byte[]; or by
 copying bytes from a primitive data type, such as long, int
 or short. In the first case, bytes are assumed to be already given in
 big-endian order, while in the second case big-endianness is enforced by this
 class.
| Modifier and Type | Class and Description | 
|---|---|
static class  | 
ImmutableByteSequence.ByteSequenceTrimException
Signals that a byte sequence cannot be trimmed. 
 | 
| Modifier and Type | Method and Description | 
|---|---|
byte[] | 
asArray()
Creates a new byte array view of this sequence. 
 | 
ByteBuffer | 
asReadOnlyBuffer()
Returns a view of this sequence as a read-only  
ByteBuffer. | 
ImmutableByteSequence | 
bitwiseAnd(ImmutableByteSequence other)
Returns a new byte sequence corresponding to the result of a bitwise AND
 operation between this sequence and the given other, i.e. 
 | 
ImmutableByteSequence | 
bitwiseOr(ImmutableByteSequence other)
Returns a new byte sequence corresponding to the result of a bitwise OR
 operation between this sequence and the given other, i.e. 
 | 
ImmutableByteSequence | 
bitwiseXor(ImmutableByteSequence other)
Returns a new byte sequence corresponding to the result of a bitwise XOR
 operation between this sequence and the given other, i.e. 
 | 
static ImmutableByteSequence | 
copyFrom(byte original)
Creates a new byte sequence of 1 byte containing the given value. 
 | 
static ImmutableByteSequence | 
copyFrom(byte[] original)
Creates a new immutable byte sequence with the same content and order of
 the passed byte array. 
 | 
static ImmutableByteSequence | 
copyFrom(byte[] original,
        int fromIdx,
        int toIdx)
Creates a new immutable byte sequence with the same content and order of
 the passed byte array, from/to the given indexes (inclusive). 
 | 
static ImmutableByteSequence | 
copyFrom(ByteBuffer original)
Creates a new immutable byte sequence copying bytes from the given
 ByteBuffer  
ByteBuffer. | 
static ImmutableByteSequence | 
copyFrom(int original)
Creates a new byte sequence of 4 bytes containing the given int value. 
 | 
static ImmutableByteSequence | 
copyFrom(long original)
Creates a new byte sequence of 8 bytes containing the given long value. 
 | 
static ImmutableByteSequence | 
copyFrom(short original)
Creates a new byte sequence of 2 bytes containing the given short value. 
 | 
boolean | 
equals(Object obj)  | 
ImmutableByteSequence | 
fit(int bitWidth)
Trims or expands a copy of this byte sequence so to fit the given
 bit-width. 
 | 
int | 
hashCode()  | 
int | 
msbIndex()
Returns the index of the most significant bit (MSB), assuming a bit
 numbering scheme of type "LSB 0", i.e. 
 | 
static ImmutableByteSequence | 
ofOnes(int size)
Creates a new byte sequence of the given size where all bits are 1. 
 | 
static ImmutableByteSequence | 
ofZeros(int size)
Creates a new byte sequence of the given size where all bits are 0. 
 | 
static ImmutableByteSequence | 
prefixOnes(int size,
          long prefixBits)
Creates a new byte sequence that is prefixed with specified number of
 ones. 
 | 
static ImmutableByteSequence | 
prefixZeros(int size,
           long prefixBits)
Creates a new byte sequence that is prefixed with specified number of
 zeros. 
 | 
int | 
size()
Gets the number of bytes in this sequence. 
 | 
String | 
toString()
Returns a hexadecimal representation of this byte sequence, e.g. 
 | 
public static ImmutableByteSequence copyFrom(byte[] original)
original - a byte array valuepublic static ImmutableByteSequence copyFrom(byte[] original, int fromIdx, int toIdx)
original - a byte array valuefromIdx - starting indextoIdx - ending indexpublic static ImmutableByteSequence copyFrom(ByteBuffer original)
ByteBuffer. If the byte buffer order is not big-endian
 bytes will be copied in reverse order.original - a byte bufferpublic static ImmutableByteSequence copyFrom(long original)
original - a long valuepublic static ImmutableByteSequence copyFrom(int original)
original - an int valuepublic static ImmutableByteSequence copyFrom(short original)
original - a short valuepublic static ImmutableByteSequence copyFrom(byte original)
original - a byte valuepublic static ImmutableByteSequence ofZeros(int size)
size - number of bytespublic static ImmutableByteSequence ofOnes(int size)
size - number of bytespublic static ImmutableByteSequence prefixZeros(int size, long prefixBits)
size - number of total bytesprefixBits - number of bits in prefixpublic static ImmutableByteSequence prefixOnes(int size, long prefixBits)
size - number of total bytesprefixBits - number of bits in prefixpublic ByteBuffer asReadOnlyBuffer()
ByteBuffer.
 
 The returned buffer will have position 0, while limit and capacity will
 be set to this sequence size(). The buffer order will be
 big-endian.
public int size()
public byte[] asArray()
public ImmutableByteSequence bitwiseAnd(ImmutableByteSequence other)
this &
 other.other - other byte sequenceIllegalArgumentException - if other sequence is null or its size is
                                  different than this sequence sizepublic ImmutableByteSequence bitwiseOr(ImmutableByteSequence other)
this |
 other.other - other byte sequenceIllegalArgumentException - if other sequence is null or its size is
                                  different than this sequence sizepublic ImmutableByteSequence bitwiseXor(ImmutableByteSequence other)
this ^
 other.other - other byte sequenceIllegalArgumentException - if other sequence is null or its size is
                                  different than this sequence sizepublic int msbIndex()
 As an example, the following conditions always hold true: ImmutableByteSequence.copyFrom(0).msbIndex() == -1
 ImmutableByteSequence.copyFrom(1).msbIndex() == 0
 ImmutableByteSequence.copyFrom(2).msbIndex() == 1
 ImmutableByteSequence.copyFrom(3).msbIndex() == 1
 ImmutableByteSequence.copyFrom(4).msbIndex() == 2
 ImmutableByteSequence.copyFrom(512).msbIndex() == 9 
public String toString()
public ImmutableByteSequence fit(int bitWidth) throws ImmutableByteSequence.ByteSequenceTrimException
bitWidth
 > msbIndex(), otherwise an exception will be thrown. When expanding, the
 sequence will be padded with zeros. The returned byte sequence will have
 minimum size to contain the given bit-width.bitWidth - a non-zero positive integerImmutableByteSequence.ByteSequenceTrimException - if the byte sequence cannot be fitted