Package org.jgroups.util
Class Bits
- java.lang.Object
-
- org.jgroups.util.Bits
-
public final class Bits extends java.lang.ObjectClass (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 (ByteBufferor output stream, using variable-length encoding. If there are not enough byte in the buffer to write a type, aBufferOverflowExceptionis 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, aBufferUnderflowExceptionis 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 bytebytesRequiredFor(int number)protected static bytebytesRequiredFor(long number)protected static byteencodeLength(byte len1, byte len2)Encodes the number of bytes needed into a single byte.protected static bytefirstNibble(byte len)protected static bytegetByteAt(long num, int index)static intmakeInt(byte[] buf, int offset, int bytes_to_read)static intmakeInt(java.io.DataInput in, int bytes_to_read)static intmakeInt(java.nio.ByteBuffer buffer, int bytes_to_read)static longmakeLong(byte[] buf, int offset, int bytes_to_read)static longmakeLong(java.io.DataInput in, int bytes_to_read)static longmakeLong(java.nio.ByteBuffer buffer, int bytes_to_read)static shortmakeShort(byte a, byte b)static AsciiStringreadAsciiString(java.io.DataInput in)Reads an AsciiString from buf.static AsciiStringreadAsciiString(java.nio.ByteBuffer buf)Reads an AsciiString from buf.static charreadChar(byte[] buf, int offset)static charreadChar(java.nio.ByteBuffer buf)static doublereadDouble(byte[] buf, int offset)static doublereadDouble(java.io.DataInput in)static doublereadDouble(java.nio.ByteBuffer buf)static floatreadFloat(byte[] buf, int offset)static floatreadFloat(java.io.DataInput in)static floatreadFloat(java.nio.ByteBuffer buf)static intreadInt(byte[] buf, int offset)static intreadInt(java.nio.ByteBuffer buf)static intreadIntCompressed(byte[] buf, int offset)static intreadIntCompressed(java.io.DataInput in)static intreadIntCompressed(java.nio.ByteBuffer buf)static longreadLong(byte[] buf, int offset)static longreadLong(java.nio.ByteBuffer buf)static longreadLongCompressed(byte[] buf, int offset)static longreadLongCompressed(java.io.DataInput in)static longreadLongCompressed(java.nio.ByteBuffer buf)static voidreadLongSequence(java.io.DataInput in, long[] seqnos, int index)Reads 2 compressed longs into an array of 2 longs.static voidreadLongSequence(java.nio.ByteBuffer buf, long[] seqnos)Reads 2 compressed longs from buf into seqnosstatic shortreadShort(byte[] buf, int offset)static shortreadShort(java.nio.ByteBuffer buf)static java.lang.StringreadString(java.io.DataInput in)Reads a string from buf.static java.lang.StringreadString(java.nio.ByteBuffer buf)Reads a string from buf.protected static bytesecondNibble(byte len)static intsize(double num)Computes the size of a variable-length encoded doublestatic intsize(float ignored)static intsize(int num)Computes the size of a variable-length encoded intstatic intsize(long num)Computes the size of a variable-length encoded long.static bytesize(long hd, long hr)static intsize(java.lang.String str)static intsize(AsciiString str)Measures the number of bytes required to encode an AsciiSring.static intsizeUTF(java.lang.String str)Measures the number of bytes required to encode a string, taking multibyte characters into account.static voidwriteAsciiString(AsciiString s, java.io.DataOutput out)Writes an AsciiString to buf.static voidwriteAsciiString(AsciiString s, java.nio.ByteBuffer buf)Writes an AsciiString to buf.static voidwriteChar(char c, byte[] buf, int offset)static voidwriteDouble(double num, byte[] buf, int offset)static voidwriteDouble(double num, java.io.DataOutput out)static voidwriteDouble(double num, java.nio.ByteBuffer buf)static voidwriteFloat(float num, byte[] buf, int offset)static voidwriteFloat(float num, java.io.DataOutput out)static voidwriteFloat(float num, java.nio.ByteBuffer buf)static voidwriteInt(int num, byte[] buf, int offset)static voidwriteIntCompressed(int num, byte[] buf, int offset)static voidwriteIntCompressed(int num, java.io.DataOutput out)static voidwriteIntCompressed(int num, java.nio.ByteBuffer buf)static voidwriteLong(long num, byte[] buf, int offset)static voidwriteLongCompressed(long num, byte[] buf, int offset)static voidwriteLongCompressed(long num, java.io.DataOutput out)Writes a long to out in variable-length encodingstatic voidwriteLongCompressed(long num, java.nio.ByteBuffer buf)static voidwriteLongSequence(long hd, long hr, java.io.DataOutput out)Writes 2 sequence numbers (seqnos) in compressed format to an output stream.static voidwriteLongSequence(long hd, long hr, java.nio.ByteBuffer buf)Writes 2 sequence numbers (seqnos) in compressed format to buf.static voidwriteShort(short s, byte[] buf, int offset)static voidwriteString(java.lang.String s, java.io.DataOutput out)Writes a string to buf.static voidwriteString(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.IOExceptionWrites 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.IOExceptionWrites 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.IOExceptionReads 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.IOExceptionWrites 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.IOExceptionReads 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)
-
-