Package org.jgroups.util
Class Bits
- java.lang.Object
-
- org.jgroups.util.Bits
-
public final class Bits extends java.lang.Object
Class (similar to (and partly copied from) java.nio.Bits) containing helper methods to encode variables (e.g. ints, long, List<Address> etc) to memory (byte buffer) or output streams and read variables from memory or input streams. The write methods write a type (e.g. an int or a char) to a buffer (ByteBuffer
or output stream, using variable-length encoding. If there are not enough byte in the buffer to write a type, aBufferOverflowException
is thrown. If the variable cannot be written to the output stream, an IOException is thrown. The read methods read a variable-length encoded type from a buffer or input stream. If there are fewer bytes in the buffer than needed to read the type, aBufferUnderflowException
is thrown. If the read fails, an IOException is thrown. The size() methods return the number of bytes used to encode the given type with variable-length encoding. There are additional helper methods to write/read custom JGroups types, e.g. address lists, Views etc Note that methods to read/write atomic types (char, int etc) should only be used if variable-length encoding is desired; otherwiseDataOutput.writeInt(int)
orByteBuffer.putInt(int)
should be used instead. At the time of writing this (Feb 2014), most methods have not yet been implemented.- Since:
- 3.5
- Author:
- Bela Ban, Sanne Grinovero
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description protected static byte
bytesRequiredFor(int number)
protected static byte
bytesRequiredFor(long number)
protected static byte
encodeLength(byte len1, byte len2)
Encodes the number of bytes needed into a single byte.protected static byte
firstNibble(byte len)
protected static byte
getByteAt(long num, int index)
static int
makeInt(byte[] buf, int offset, int bytes_to_read)
static int
makeInt(java.io.DataInput in, int bytes_to_read)
static int
makeInt(java.nio.ByteBuffer buffer, int bytes_to_read)
static long
makeLong(byte[] buf, int offset, int bytes_to_read)
static long
makeLong(java.io.DataInput in, int bytes_to_read)
static long
makeLong(java.nio.ByteBuffer buffer, int bytes_to_read)
static short
makeShort(byte a, byte b)
static AsciiString
readAsciiString(java.io.DataInput in)
Reads an AsciiString from buf.static AsciiString
readAsciiString(java.nio.ByteBuffer buf)
Reads an AsciiString from buf.static char
readChar(byte[] buf, int offset)
static char
readChar(java.nio.ByteBuffer buf)
static double
readDouble(byte[] buf, int offset)
static double
readDouble(java.io.DataInput in)
static double
readDouble(java.nio.ByteBuffer buf)
static float
readFloat(byte[] buf, int offset)
static float
readFloat(java.io.DataInput in)
static float
readFloat(java.nio.ByteBuffer buf)
static int
readInt(byte[] buf, int offset)
static int
readInt(java.nio.ByteBuffer buf)
static int
readIntCompressed(byte[] buf, int offset)
static int
readIntCompressed(java.io.DataInput in)
static int
readIntCompressed(java.nio.ByteBuffer buf)
static long
readLong(byte[] buf, int offset)
static long
readLong(java.nio.ByteBuffer buf)
static long
readLongCompressed(byte[] buf, int offset)
static long
readLongCompressed(java.io.DataInput in)
static long
readLongCompressed(java.nio.ByteBuffer buf)
static void
readLongSequence(java.io.DataInput in, long[] seqnos, int index)
Reads 2 compressed longs into an array of 2 longs.static void
readLongSequence(java.nio.ByteBuffer buf, long[] seqnos)
Reads 2 compressed longs from buf into seqnosstatic short
readShort(byte[] buf, int offset)
static short
readShort(java.nio.ByteBuffer buf)
static java.lang.String
readString(java.io.DataInput in)
Reads a string from buf.static java.lang.String
readString(java.nio.ByteBuffer buf)
Reads a string from buf.protected static byte
secondNibble(byte len)
static int
size(double num)
Computes the size of a variable-length encoded doublestatic int
size(float ignored)
static int
size(int num)
Computes the size of a variable-length encoded intstatic int
size(long num)
Computes the size of a variable-length encoded long.static byte
size(long hd, long hr)
static int
size(java.lang.String str)
static int
size(AsciiString str)
Measures the number of bytes required to encode an AsciiSring.static int
sizeUTF(java.lang.String str)
Measures the number of bytes required to encode a string, taking multibyte characters into account.static void
writeAsciiString(AsciiString s, java.io.DataOutput out)
Writes an AsciiString to buf.static void
writeAsciiString(AsciiString s, java.nio.ByteBuffer buf)
Writes an AsciiString to buf.static void
writeChar(char c, byte[] buf, int offset)
static void
writeDouble(double num, byte[] buf, int offset)
static void
writeDouble(double num, java.io.DataOutput out)
static void
writeDouble(double num, java.nio.ByteBuffer buf)
static void
writeFloat(float num, byte[] buf, int offset)
static void
writeFloat(float num, java.io.DataOutput out)
static void
writeFloat(float num, java.nio.ByteBuffer buf)
static void
writeInt(int num, byte[] buf, int offset)
static void
writeIntCompressed(int num, byte[] buf, int offset)
static void
writeIntCompressed(int num, java.io.DataOutput out)
static void
writeIntCompressed(int num, java.nio.ByteBuffer buf)
static void
writeLong(long num, byte[] buf, int offset)
static void
writeLongCompressed(long num, byte[] buf, int offset)
static void
writeLongCompressed(long num, java.io.DataOutput out)
Writes a long to out in variable-length encodingstatic void
writeLongCompressed(long num, java.nio.ByteBuffer buf)
static void
writeLongSequence(long hd, long hr, java.io.DataOutput out)
Writes 2 sequence numbers (seqnos) in compressed format to an output stream.static void
writeLongSequence(long hd, long hr, java.nio.ByteBuffer buf)
Writes 2 sequence numbers (seqnos) in compressed format to buf.static void
writeShort(short s, byte[] buf, int offset)
static void
writeString(java.lang.String s, java.io.DataOutput out)
Writes a string to buf.static void
writeString(java.lang.String s, java.nio.ByteBuffer buf)
Writes a string to buf.
-
-
-
Method Detail
-
writeChar
public static void writeChar(char c, byte[] buf, int offset)
-
readChar
public static char readChar(byte[] buf, int offset)
-
readChar
public static char readChar(java.nio.ByteBuffer buf)
-
writeShort
public static void writeShort(short s, byte[] buf, int offset)
-
readShort
public static short readShort(byte[] buf, int offset)
-
readShort
public static short readShort(java.nio.ByteBuffer buf)
-
makeShort
public static short makeShort(byte a, byte b)
-
writeInt
public static void writeInt(int num, byte[] buf, int offset)
-
readInt
public static int readInt(byte[] buf, int offset)
-
readInt
public static int readInt(java.nio.ByteBuffer buf)
-
writeIntCompressed
public static void writeIntCompressed(int num, byte[] buf, int offset)
-
readIntCompressed
public static int readIntCompressed(byte[] buf, int offset)
-
writeIntCompressed
public static void writeIntCompressed(int num, java.nio.ByteBuffer buf)
-
readIntCompressed
public static int readIntCompressed(java.nio.ByteBuffer buf)
-
writeIntCompressed
public static void writeIntCompressed(int num, java.io.DataOutput out) throws java.io.IOException
- Throws:
java.io.IOException
-
readIntCompressed
public static int readIntCompressed(java.io.DataInput in) throws java.io.IOException
- Throws:
java.io.IOException
-
makeInt
public static int makeInt(java.nio.ByteBuffer buffer, int bytes_to_read)
-
makeInt
public static int makeInt(java.io.DataInput in, int bytes_to_read) throws java.io.IOException
- Throws:
java.io.IOException
-
makeInt
public static int makeInt(byte[] buf, int offset, int bytes_to_read)
-
size
public static int size(int num)
Computes the size of a variable-length encoded int- Parameters:
num
- the int- Returns:
- the number of bytes needed to variable-length encode num
-
writeLong
public static void writeLong(long num, byte[] buf, int offset)
-
readLong
public static long readLong(byte[] buf, int offset)
-
readLong
public static long readLong(java.nio.ByteBuffer buf)
-
writeLongCompressed
public static void writeLongCompressed(long num, byte[] buf, int offset)
-
readLongCompressed
public static long readLongCompressed(byte[] buf, int offset)
-
writeLongCompressed
public static void writeLongCompressed(long num, java.nio.ByteBuffer buf)
-
readLongCompressed
public static long readLongCompressed(java.nio.ByteBuffer buf)
-
writeLongCompressed
public static void writeLongCompressed(long num, java.io.DataOutput out) throws java.io.IOException
Writes a long to out in variable-length encoding- Throws:
java.io.IOException
-
readLongCompressed
public static long readLongCompressed(java.io.DataInput in) throws java.io.IOException
- Throws:
java.io.IOException
-
size
public static int size(long num)
Computes the size of a variable-length encoded long. Note that this is not currently using variable-length encoding (will be implemented later).- Parameters:
num
- the long- Returns:
- the number of bytes needed to variable-length encode num
-
makeLong
public static long makeLong(byte[] buf, int offset, int bytes_to_read)
-
makeLong
public static long makeLong(java.nio.ByteBuffer buffer, int bytes_to_read)
-
makeLong
public static long makeLong(java.io.DataInput in, int bytes_to_read) throws java.io.IOException
- Throws:
java.io.IOException
-
writeLongSequence
public static void writeLongSequence(long hd, long hr, java.nio.ByteBuffer buf)
Writes 2 sequence numbers (seqnos) in compressed format to buf. The seqnos are non-negative and hr is guaranteed to be >= hd. Once variable-length encoding has been implemented, this method will probably get dropped as we can simply write the 2 longs individually.- Parameters:
hd
- the highest delivered seqno. Guaranteed to be a positive numberhr
- the highest received seqno. Guaranteed to be a positive number. Greater than or equal to hdbuf
- the buffer to write to
-
writeLongSequence
public static void writeLongSequence(long hd, long hr, java.io.DataOutput out) throws java.io.IOException
Writes 2 sequence numbers (seqnos) in compressed format to an output stream. The seqnos are non-negative and hr is guaranteed to be >= hd. Once variable-length encoding has been implemented, this method will probably get dropped as we can simply write the 2 longs individually.- Parameters:
hd
- the highest delivered seqno. Guaranteed to be a positive numberhr
- the highest received seqno. Guaranteed to be a positive number. Greater than or equal to hdout
- the output stream to write to- Throws:
java.io.IOException
-
readLongSequence
public static void readLongSequence(java.nio.ByteBuffer buf, long[] seqnos)
Reads 2 compressed longs from buf into seqnos Once variable-length encoding has been implemented, this method will probably get dropped as we can simply read the 2 longs individually.- Parameters:
buf
- the buffer to read fromseqnos
- the array to read the seqnos into, needs to have a length of 2
-
readLongSequence
public static void readLongSequence(java.io.DataInput in, long[] seqnos, int index) throws java.io.IOException
Reads 2 compressed longs into an array of 2 longs. Once variable-length encoding has been implemented, this method will probably get dropped as we can simply read the 2 longs individually.- Parameters:
in
- the input stream to read fromseqnos
- the array to read the seqnos into, needs to have a length of 2index
- the index of the first element to be written; the seqnos are written to seqnos[index] and seqnos[index+1]- Throws:
java.io.IOException
-
size
public static byte size(long hd, long hr)
-
writeFloat
public static void writeFloat(float num, byte[] buf, int offset)
-
readFloat
public static float readFloat(byte[] buf, int offset)
-
writeFloat
public static void writeFloat(float num, java.nio.ByteBuffer buf)
-
readFloat
public static float readFloat(java.nio.ByteBuffer buf)
-
writeFloat
public static void writeFloat(float num, java.io.DataOutput out) throws java.io.IOException
- Throws:
java.io.IOException
-
readFloat
public static float readFloat(java.io.DataInput in) throws java.io.IOException
- Throws:
java.io.IOException
-
size
public static int size(float ignored)
-
writeDouble
public static void writeDouble(double num, byte[] buf, int offset)
-
readDouble
public static double readDouble(byte[] buf, int offset)
-
writeDouble
public static void writeDouble(double num, java.nio.ByteBuffer buf)
-
readDouble
public static double readDouble(java.nio.ByteBuffer buf)
-
writeDouble
public static void writeDouble(double num, java.io.DataOutput out) throws java.io.IOException
- Throws:
java.io.IOException
-
readDouble
public static double readDouble(java.io.DataInput in) throws java.io.IOException
- Throws:
java.io.IOException
-
size
public static int size(double num)
Computes the size of a variable-length encoded double- Parameters:
num
- the double- Returns:
- the number of bytes needed to variable-length encode num
-
writeString
public static void writeString(java.lang.String s, java.nio.ByteBuffer buf)
Writes a string to buf. The length of the string is written first, followed by the chars (as single-byte values). Multi-byte values are truncated: only the lower byte of each multi-byte char is written, similar toDataOutput.writeChars(String)
.- Parameters:
s
- the stringbuf
- the buffer
-
writeString
public static void writeString(java.lang.String s, java.io.DataOutput out) throws java.io.IOException
Writes a string to buf. The length of the string is written first, followed by the chars (as single-byte values). Multi-byte values are truncated: only the lower byte of each multi-byte char is written, similar toDataOutput.writeChars(String)
.- Parameters:
s
- the stringout
- the output stream- Throws:
java.io.IOException
-
readString
public static java.lang.String readString(java.nio.ByteBuffer buf)
Reads a string from buf. The length is read first, followed by the chars. Each char is a single byte- Parameters:
buf
- the buffer- Returns:
- the string read from buf
-
readString
public static java.lang.String readString(java.io.DataInput in) throws java.io.IOException
Reads a string from buf. The length is read first, followed by the chars. Each char is a single byte- Parameters:
in
- the input stream- Returns:
- the string read from buf
- Throws:
java.io.IOException
-
sizeUTF
public static int sizeUTF(java.lang.String str)
Measures the number of bytes required to encode a string, taking multibyte characters into account. Measures strings written byDataOutput.writeUTF(String)
.- Parameters:
str
- the string- Returns:
- the number of bytes required for encoding str
-
size
public static int size(java.lang.String str)
-
writeAsciiString
public static void writeAsciiString(AsciiString s, java.nio.ByteBuffer buf)
Writes an AsciiString to buf. The length of the string is written first, followed by the chars (as single-byte values).- Parameters:
s
- the stringbuf
- the buffer
-
writeAsciiString
public static void writeAsciiString(AsciiString s, java.io.DataOutput out) throws java.io.IOException
Writes an AsciiString to buf. The length of the string is written first, followed by the chars (as single-byte values).- Parameters:
s
- the stringout
- the output stream- Throws:
java.io.IOException
-
readAsciiString
public static AsciiString readAsciiString(java.nio.ByteBuffer buf)
Reads an AsciiString from buf. The length is read first, followed by the chars. Each char is a single byte- Parameters:
buf
- the buffer- Returns:
- the string read from buf
-
readAsciiString
public static AsciiString readAsciiString(java.io.DataInput in) throws java.io.IOException
Reads an AsciiString from buf. The length is read first, followed by the chars. Each char is a single byte- Parameters:
in
- the input stream- Returns:
- the string read from buf
- Throws:
java.io.IOException
-
size
public static int size(AsciiString str)
Measures the number of bytes required to encode an AsciiSring.- Parameters:
str
- the string- Returns:
- the number of bytes required for encoding str
-
encodeLength
protected static byte encodeLength(byte len1, byte len2)
Encodes the number of bytes needed into a single byte. The first number is encoded in the first nibble (the first 4 bits), the second number in the second nibble- Parameters:
len1
- The number of bytes needed to store a long. Must be between 0 and 8len2
- The number of bytes needed to store a long. Must be between 0 and 8- Returns:
- The byte storing the 2 numbers len1 and len2
-
firstNibble
protected static byte firstNibble(byte len)
-
secondNibble
protected static byte secondNibble(byte len)
-
bytesRequiredFor
protected static byte bytesRequiredFor(long number)
-
bytesRequiredFor
protected static byte bytesRequiredFor(int number)
-
getByteAt
protected static byte getByteAt(long num, int index)
-
-