Class BufferUtils
- java.lang.Object
-
- org.apache.sshd.common.util.buffer.BufferUtils
-
public final class BufferUtils extends Object
TODO Add javadoc- Author:
- Apache MINA SSHD Project
-
-
Field Summary
Fields Modifier and Type Field Description static IntUnaryOperator
DEFAULT_BUFFER_GROWTH_FACTOR
static char
DEFAULT_HEX_SEPARATOR
static int
DEFAULT_HEXDUMP_CHUNK_SIZE
static Level
DEFAULT_HEXDUMP_LEVEL
static char
EMPTY_HEX_SEPARATOR
static String
HEX_DIGITS
static String
HEXDUMP_CHUNK_SIZE
static long
MAX_UINT32_VALUE
Maximum value of auint32
fieldstatic int
MAX_UINT8_VALUE
Maximum value of auint8
field
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static <A extends Appendable>
AappendHex(A sb, byte[] array, int offset, int len, char sep)
static <A extends Appendable>
AappendHex(A sb, char sep, byte... array)
static <B extends Buffer>
Bclear(B buffer)
InvokesBuffer.clear()
static byte[]
decodeHex(char separator, CharSequence csq)
static byte[]
decodeHex(char separator, CharSequence csq, int start, int end)
static <S extends OutputStream>
intdecodeHex(S stream, char separator, CharSequence csq)
static <S extends OutputStream>
intdecodeHex(S stream, char separator, CharSequence csq, int start, int end)
static void
dumpHex(SimplifiedLog logger, Level level, String prefix, char sep, int chunkSize, byte... data)
static void
dumpHex(SimplifiedLog logger, Level level, String prefix, char sep, int chunkSize, byte[] data, int offset, int len)
static void
dumpHex(SimplifiedLog logger, Level level, String prefix, PropertyResolver resolver, char sep, byte... data)
static void
dumpHex(SimplifiedLog logger, Level level, String prefix, PropertyResolver resolver, char sep, byte[] data, int offset, int len)
static boolean
equals(byte[] a1, byte[] a2)
static boolean
equals(byte[] a1, int a1Offset, byte[] a2, int a2Offset, int length)
static byte
fromHex(char hi, char lo)
static int
getNextPowerOf2(int value)
static long
getUInt(byte... buf)
static long
getUInt(byte[] buf, int off, int len)
static boolean
isValidInt32Value(long value)
static boolean
isValidUint32Value(long value)
static int
putUInt(long value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)static int
putUInt(long value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)static int
readInt(InputStream input, byte[] buf)
Read a 32-bit value in network orderstatic int
readInt(InputStream input, byte[] buf, int offset, int len)
Read a 32-bit value in network orderstatic long
readUInt(InputStream input, byte[] buf)
Read a 32-bit value in network orderstatic long
readUInt(InputStream input, byte[] buf, int offset, int len)
Read a 32-bit value in network orderstatic String
toHex(byte... array)
static String
toHex(byte[] array, int offset, int len)
static String
toHex(byte[] array, int offset, int len, char sep)
static String
toHex(char sep, byte... array)
static int
updateLengthPlaceholder(Buffer buffer, int lenPos)
Used for encodings where we don't know the data length before adding it to the buffer.static void
updateLengthPlaceholder(Buffer buffer, int lenPos, int dataLength)
Updates a 32-bit "placeholder" location for data length - moves the write position to the specified placeholder position, updates the length value and then moves the write position it back to its original value.static long
validateInt32Value(long value, String message)
static long
validateInt32Value(long value, String format, Object arg)
static long
validateInt32Value(long value, String format, Object... args)
static long
validateUint32Value(long value, String message)
static long
validateUint32Value(long value, String format, Object arg)
static long
validateUint32Value(long value, String format, Object... args)
static void
writeInt(OutputStream output, int value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)static void
writeInt(OutputStream output, int value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)static void
writeUInt(OutputStream output, long value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)static void
writeUInt(OutputStream output, long value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)
-
-
-
Field Detail
-
DEFAULT_HEX_SEPARATOR
public static final char DEFAULT_HEX_SEPARATOR
- See Also:
- Constant Field Values
-
EMPTY_HEX_SEPARATOR
public static final char EMPTY_HEX_SEPARATOR
- See Also:
- Constant Field Values
-
HEX_DIGITS
public static final String HEX_DIGITS
- See Also:
- Constant Field Values
-
HEXDUMP_CHUNK_SIZE
public static final String HEXDUMP_CHUNK_SIZE
- See Also:
- Constant Field Values
-
DEFAULT_HEXDUMP_CHUNK_SIZE
public static final int DEFAULT_HEXDUMP_CHUNK_SIZE
- See Also:
- Constant Field Values
-
DEFAULT_HEXDUMP_LEVEL
public static final Level DEFAULT_HEXDUMP_LEVEL
-
DEFAULT_BUFFER_GROWTH_FACTOR
public static final IntUnaryOperator DEFAULT_BUFFER_GROWTH_FACTOR
-
MAX_UINT32_VALUE
public static final long MAX_UINT32_VALUE
Maximum value of auint32
field- See Also:
- Constant Field Values
-
MAX_UINT8_VALUE
public static final int MAX_UINT8_VALUE
Maximum value of auint8
field- See Also:
- Constant Field Values
-
-
Method Detail
-
dumpHex
public static void dumpHex(SimplifiedLog logger, Level level, String prefix, PropertyResolver resolver, char sep, byte... data)
-
dumpHex
public static void dumpHex(SimplifiedLog logger, Level level, String prefix, PropertyResolver resolver, char sep, byte[] data, int offset, int len)
-
dumpHex
public static void dumpHex(SimplifiedLog logger, Level level, String prefix, char sep, int chunkSize, byte... data)
-
dumpHex
public static void dumpHex(SimplifiedLog logger, Level level, String prefix, char sep, int chunkSize, byte[] data, int offset, int len)
-
toHex
public static String toHex(byte... array)
-
toHex
public static String toHex(char sep, byte... array)
-
toHex
public static String toHex(byte[] array, int offset, int len)
-
toHex
public static String toHex(byte[] array, int offset, int len, char sep)
-
appendHex
public static <A extends Appendable> A appendHex(A sb, char sep, byte... array) throws IOException
- Throws:
IOException
-
appendHex
public static <A extends Appendable> A appendHex(A sb, byte[] array, int offset, int len, char sep) throws IOException
- Throws:
IOException
-
decodeHex
public static byte[] decodeHex(char separator, CharSequence csq)
- Parameters:
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytes- Returns:
- The decoded bytes
- Throws:
IllegalArgumentException
- If invalid HEX sequence lengthNumberFormatException
- If invalid HEX characters found- See Also:
decodeHex(char, CharSequence, int, int)
-
decodeHex
public static byte[] decodeHex(char separator, CharSequence csq, int start, int end)
- Parameters:
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytesstart
- Start offset of the HEX sequence (inclusive)end
- End offset of the HEX sequence (exclusive)- Returns:
- The decoded bytes
- Throws:
IllegalArgumentException
- If invalid HEX sequence lengthNumberFormatException
- If invalid HEX characters found
-
decodeHex
public static <S extends OutputStream> int decodeHex(S stream, char separator, CharSequence csq) throws IOException
- Type Parameters:
S
- TheOutputStream
generic type- Parameters:
stream
- The targetOutputStream
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytes- Returns:
- The number of bytes written to the stream
- Throws:
IOException
- If failed to writeIllegalArgumentException
- If invalid HEX sequence lengthNumberFormatException
- If invalid HEX characters found- See Also:
decodeHex(OutputStream, char, CharSequence, int, int)
-
decodeHex
public static <S extends OutputStream> int decodeHex(S stream, char separator, CharSequence csq, int start, int end) throws IOException
- Type Parameters:
S
- TheOutputStream
generic type- Parameters:
stream
- The targetOutputStream
separator
- The separator between the HEX values - may beEMPTY_HEX_SEPARATOR
csq
- TheCharSequence
containing the HEX encoded bytesstart
- Start offset of the HEX sequence (inclusive)end
- End offset of the HEX sequence (exclusive)- Returns:
- The number of bytes written to the stream
- Throws:
IOException
- If failed to writeIllegalArgumentException
- If invalid HEX sequence lengthNumberFormatException
- If invalid HEX characters found
-
fromHex
public static byte fromHex(char hi, char lo) throws NumberFormatException
- Throws:
NumberFormatException
-
readInt
public static int readInt(InputStream input, byte[] buf) throws IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to use- Returns:
- The read 32-bit value
- Throws:
IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
readInt(InputStream, byte[], int, int)
-
readInt
public static int readInt(InputStream input, byte[] buf, int offset, int len) throws IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to useoffset
- Offset in buffer to uslen
- Available length - must have at least 4 bytes available- Returns:
- The read 32-bit value
- Throws:
IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
readUInt(InputStream, byte[], int, int)
-
readUInt
public static long readUInt(InputStream input, byte[] buf) throws IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to use- Returns:
- The read 32-bit value
- Throws:
IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
readUInt(InputStream, byte[], int, int)
-
readUInt
public static long readUInt(InputStream input, byte[] buf, int offset, int len) throws IOException
Read a 32-bit value in network order- Parameters:
input
- TheInputStream
buf
- Work buffer to useoffset
- Offset in buffer to uslen
- Available length - must have at least 4 bytes available- Returns:
- The read 32-bit value
- Throws:
IOException
- If failed to read 4 bytes or not enough room in work buffer- See Also:
getUInt(byte[], int, int)
-
getUInt
public static long getUInt(byte... buf)
- Parameters:
buf
- A buffer holding a 32-bit unsigned integer in big endian format. Note: if more than 4 bytes are available, then only the first 4 bytes in the buffer will be used- Returns:
- The result as a
long
whose 32 high-order bits are zero - See Also:
getUInt(byte[], int, int)
-
getUInt
public static long getUInt(byte[] buf, int off, int len)
- Parameters:
buf
- A buffer holding a 32-bit unsigned integer in big endian format.off
- The offset of the data in the bufferlen
- The available data length. Note: if more than 4 bytes are available, then only the first 4 bytes in the buffer will be used (starting at the specified offset)- Returns:
- The result as a
long
whose 32 high-order bits are zero
-
writeInt
public static void writeInt(OutputStream output, int value, byte[] buf) throws IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytes- Throws:
IOException
- If failed to write the value or work buffer too small- See Also:
writeInt(OutputStream, int, byte[], int, int)
-
writeInt
public static void writeInt(OutputStream output, int value, byte[] buf, int off, int len) throws IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytesoff
- The offset to write the valuelen
- The available space- Throws:
IOException
- If failed to write the value or work buffer too small- See Also:
writeUInt(OutputStream, long, byte[], int, int)
-
writeUInt
public static void writeUInt(OutputStream output, long value, byte[] buf) throws IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytes- Throws:
IOException
- If failed to write the value or work buffer too small- See Also:
writeUInt(OutputStream, long, byte[], int, int)
-
writeUInt
public static void writeUInt(OutputStream output, long value, byte[] buf, int off, int len) throws IOException
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
output
- TheOutputStream
to write the valuevalue
- The 32-bit valuebuf
- A work buffer to use - must have enough space to contain 4 bytesoff
- The offset to write the valuelen
- The available space- Throws:
IOException
- If failed to write the value or work buffer to small- See Also:
putUInt(long, byte[], int, int)
-
putUInt
public static int putUInt(long value, byte[] buf)
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
value
- The 32-bit valuebuf
- The buffer- Returns:
- The number of bytes used in the buffer
- Throws:
IllegalArgumentException
- if not enough space available- See Also:
putUInt(long, byte[], int, int)
-
putUInt
public static int putUInt(long value, byte[] buf, int off, int len)
Writes a 32-bit value in network order (i.e., MSB 1st)- Parameters:
value
- The 32-bit valuebuf
- The bufferoff
- The offset to write the valuelen
- The available space- Returns:
- The number of bytes used in the buffer
- Throws:
IllegalArgumentException
- if not enough space available
-
equals
public static boolean equals(byte[] a1, byte[] a2)
-
equals
public static boolean equals(byte[] a1, int a1Offset, byte[] a2, int a2Offset, int length)
-
getNextPowerOf2
public static int getNextPowerOf2(int value)
-
updateLengthPlaceholder
public static int updateLengthPlaceholder(Buffer buffer, int lenPos)
Used for encodings where we don't know the data length before adding it to the buffer. The idea is to place a 32-bit "placeholder", encode the data and then return back to the placeholder and update the length. The method calculates the encoded data length, moves the write position to the specified placeholder position, updates the length value and then moves the write position it back to its original value.- Parameters:
buffer
- TheBuffer
lenPos
- The offset in the buffer where the length placeholder is to be update - Note: assumption is that the encoded data starts immediately after the placeholder- Returns:
- The amount of data that has been encoded
-
updateLengthPlaceholder
public static void updateLengthPlaceholder(Buffer buffer, int lenPos, int dataLength)
Updates a 32-bit "placeholder" location for data length - moves the write position to the specified placeholder position, updates the length value and then moves the write position it back to its original value.- Parameters:
buffer
- TheBuffer
lenPos
- The offset in the buffer where the length placeholder is to be update - Note: assumption is that the encoded data starts immediately after the placeholderdataLength
- The length to update
-
clear
public static <B extends Buffer> B clear(B buffer)
InvokesBuffer.clear()
- Type Parameters:
B
- The generic buffer type- Parameters:
buffer
- ABuffer
instance - ignored ifnull
- Returns:
- The same as the input instance
-
validateInt32Value
public static long validateInt32Value(long value, String message)
-
validateInt32Value
public static long validateInt32Value(long value, String format, Object... args)
-
isValidInt32Value
public static boolean isValidInt32Value(long value)
-
validateUint32Value
public static long validateUint32Value(long value, String message)
-
validateUint32Value
public static long validateUint32Value(long value, String format, Object... args)
-
isValidUint32Value
public static boolean isValidUint32Value(long value)
-
-