Package org.apache.catalina.tribes.io
Class XByteBuffer
java.lang.Object
org.apache.catalina.tribes.io.XByteBuffer
- All Implemented Interfaces:
Serializable
The XByteBuffer provides a dual functionality.
One, it stores message bytes and automatically extends the byte buffer if needed.
Two, it can encode and decode packages so that they can be defined and identified as they come in on a socket.
THIS CLASS IS NOT THREAD SAFE
Transfer package:
Two, it can encode and decode packages so that they can be defined and identified as they come in on a socket.
THIS CLASS IS NOT THREAD SAFE
Transfer package:
- START_DATA- 7 bytes - FLT2002
- SIZE - 4 bytes - size of the data package
- DATA - should be as many bytes as the prev SIZE
- END_DATA - 7 bytes - TLF2003
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionprotected byte[]
Variable to hold the dataprotected int
Current length of data in the bufferprotected boolean
Flag for discarding invalid packages If this flag is set to true, and append(byte[],...) is called, the data added will be inspected, and if it doesn't start withSTART_DATA
it will be thrown away.protected static final StringManager
-
Constructor Summary
ConstructorDescriptionXByteBuffer
(byte[] data, boolean discard) XByteBuffer
(byte[] data, int size, boolean discard) XByteBuffer
(int size, boolean discard) Constructs a new XByteBuffer.
TODO use a pool of byte[] for performance -
Method Summary
Modifier and TypeMethodDescriptionboolean
append
(boolean i) boolean
append
(byte i) boolean
append
(byte[] b, int off, int len) boolean
append
(int i) boolean
append
(long i) boolean
append
(ByteBuffer b, int len) Appends the data to the buffer.void
clear()
Resets the bufferint
Internal mechanism to make a check if a complete package exists within the bufferint
countPackages
(boolean first) static byte[]
createDataPackage
(byte[] data) static byte[]
createDataPackage
(byte[] data, int doff, int dlength, byte[] buffer, int bufoff) static byte[]
createDataPackage
(ChannelData cdata) Creates a complete data packagestatic Serializable
deserialize
(byte[] data) static Serializable
deserialize
(byte[] data, int offset, int length) static Serializable
deserialize
(byte[] data, int offset, int length, ClassLoader[] cls) boolean
Method to check if a package exists in this byte buffer.void
expand
(int newcount) extractDataPackage
(boolean clearFromBuffer) Extracts the message bytes from a package.extractPackage
(boolean clearFromBuffer) static int
firstIndexOf
(byte[] src, int srcOff, byte[] find) Similar to a String.IndexOf, but uses pure bytes.byte[]
getBytes()
byte[]
int
static int
getDataPackageLength
(int datalength) boolean
int
void
reset()
static byte[]
serialize
(Serializable msg) Serializes a message into cluster datavoid
setDiscard
(boolean discard) void
setLength
(int size) static boolean
toBoolean
(byte[] b, int offset) Converts a byte array entry to boolean.static byte[]
toBytes
(boolean bool, byte[] data, int offset) Converts a boolean and put it in a byte array.static byte[]
toBytes
(int n, byte[] b, int offset) Converts an integer to four bytes.static byte[]
toBytes
(long n, byte[] b, int offset) Converts a long to eight bytes.static int
toInt
(byte[] b, int off) Convert four bytes to an intstatic long
toLong
(byte[] b, int off) Convert eight bytes to a longvoid
trim
(int length)
-
Field Details
-
sm
-
buf
protected byte[] bufVariable to hold the data -
bufSize
protected int bufSizeCurrent length of data in the buffer -
discard
protected boolean discardFlag for discarding invalid packages If this flag is set to true, and append(byte[],...) is called, the data added will be inspected, and if it doesn't start withSTART_DATA
it will be thrown away.
-
-
Constructor Details
-
XByteBuffer
public XByteBuffer(int size, boolean discard) Constructs a new XByteBuffer.
TODO use a pool of byte[] for performance- Parameters:
size
- the initial size of the byte bufferdiscard
- Flag for discarding invalid packages
-
XByteBuffer
public XByteBuffer(byte[] data, boolean discard) -
XByteBuffer
public XByteBuffer(byte[] data, int size, boolean discard)
-
-
Method Details
-
getLength
public int getLength() -
setLength
public void setLength(int size) -
trim
public void trim(int length) -
reset
public void reset() -
getBytesDirect
public byte[] getBytesDirect() -
getBytes
public byte[] getBytes()- Returns:
- the bytes in the buffer, in its exact length
-
clear
public void clear()Resets the buffer -
append
Appends the data to the buffer. If the data is incorrectly formatted, ie, the data should always start with the header, false will be returned and the data will be discarded.- Parameters:
b
- - bytes to be appendedlen
- - the number of bytes to append.- Returns:
- true if the data was appended correctly. Returns false if the package is incorrect, ie missing header or something, or the length of data is 0
-
append
public boolean append(byte i) -
append
public boolean append(boolean i) -
append
public boolean append(long i) -
append
public boolean append(int i) -
append
public boolean append(byte[] b, int off, int len) -
expand
public void expand(int newcount) -
getCapacity
public int getCapacity() -
countPackages
public int countPackages()Internal mechanism to make a check if a complete package exists within the buffer- Returns:
- - true if a complete package (header,compress,size,data,footer) exists within the buffer
-
countPackages
public int countPackages(boolean first) -
doesPackageExist
public boolean doesPackageExist()Method to check if a package exists in this byte buffer.- Returns:
- - true if a complete package (header,options,size,data,footer) exists within the buffer
-
extractDataPackage
Extracts the message bytes from a package. If no package exists, a IllegalStateException will be thrown.- Parameters:
clearFromBuffer
- - if true, the package will be removed from the byte buffer- Returns:
- - returns the actual message bytes (header, compress,size and footer not included).
-
extractPackage
-
createDataPackage
Creates a complete data package- Parameters:
cdata
- - the message data to be contained within the package- Returns:
- - a full package (header,size,data,footer)
-
createDataPackage
public static byte[] createDataPackage(byte[] data, int doff, int dlength, byte[] buffer, int bufoff) -
getDataPackageLength
public static int getDataPackageLength(int datalength) -
createDataPackage
public static byte[] createDataPackage(byte[] data) -
toInt
public static int toInt(byte[] b, int off) Convert four bytes to an int- Parameters:
b
- - the byte array containing the four bytesoff
- - the offset- Returns:
- the integer value constructed from the four bytes
-
toLong
public static long toLong(byte[] b, int off) Convert eight bytes to a long- Parameters:
b
- - the byte array containing the four bytesoff
- - the offset- Returns:
- the long value constructed from the eight bytes
-
toBytes
public static byte[] toBytes(boolean bool, byte[] data, int offset) Converts a boolean and put it in a byte array.- Parameters:
bool
- the integerdata
- the byte buffer in which the boolean will be placedoffset
- the offset in the byte array- Returns:
- the byte array
-
toBoolean
public static boolean toBoolean(byte[] b, int offset) Converts a byte array entry to boolean.- Parameters:
b
- byte arrayoffset
- within byte array- Returns:
- true if byte array entry is non-zero, false otherwise
-
toBytes
public static byte[] toBytes(int n, byte[] b, int offset) Converts an integer to four bytes.- Parameters:
n
- the integerb
- the byte buffer in which the integer will be placedoffset
- the offset in the byte array- Returns:
- four bytes in an array
-
toBytes
public static byte[] toBytes(long n, byte[] b, int offset) Converts a long to eight bytes.- Parameters:
n
- the longb
- the byte buffer in which the integer will be placedoffset
- the offset in the byte array- Returns:
- eight bytes in an array
-
firstIndexOf
public static int firstIndexOf(byte[] src, int srcOff, byte[] find) Similar to a String.IndexOf, but uses pure bytes.- Parameters:
src
- - the source bytes to be searchedsrcOff
- - offset on the source bufferfind
- - the string to be found within src- Returns:
- - the index of the first matching byte. -1 if the find array is not found
-
deserialize
public static Serializable deserialize(byte[] data) throws IOException, ClassNotFoundException, ClassCastException -
deserialize
public static Serializable deserialize(byte[] data, int offset, int length) throws IOException, ClassNotFoundException, ClassCastException -
deserialize
public static Serializable deserialize(byte[] data, int offset, int length, ClassLoader[] cls) throws IOException, ClassNotFoundException, ClassCastException -
serialize
Serializes a message into cluster data- Parameters:
msg
- ClusterMessage- Returns:
- serialized content as byte[] array
- Throws:
IOException
- Serialization error
-
setDiscard
public void setDiscard(boolean discard) -
getDiscard
public boolean getDiscard()
-