Class BytesMessage
- All Implemented Interfaces:
Constructable<Message>,Message,SizeStreamable,Streamable
- Direct Known Subclasses:
FragmentedMessage
Message containing a byte array as payload.
The byte array can point to a reference, and we can subset it using index and length. When the message is serialized, only the bytes between index and length are written.
- Since:
- 5.0
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.jgroups.Message
Message.Flag, Message.TransientFlag -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected byte[]The payloadprotected intThe number of bytes in the arrayprotected intThe index into the payloadFields inherited from class org.jgroups.BaseMessage
dest, DEST_SET, flags, headers, sender, SRC_SET, transient_flagsFields inherited from interface org.jgroups.Message
BYTES_MSG, COMPOSITE_MSG, EARLYBATCH_MSG, EMPTY_MSG, FRAG_MSG, LONG_MSG, NIO_MSG, OBJ_MSG -
Constructor Summary
ConstructorsConstructorDescriptionBytesMessage(Address dest) Constructs a message given a destination addressBytesMessage(Address dest, byte[] array) Constructs a message given a destination and source address and the payload byte arrayBytesMessage(Address dest, byte[] array, int offset, int length) Constructs a message.BytesMessage(Address dest, Object obj) Constructs a message given a destination and source address and the payload objectBytesMessage(Address dest, ByteArray array) -
Method Summary
Modifier and TypeMethodDescriptionprotected MessagecopyPayload(Message copy) Copies the byte array.create()Creates an instance of the class implementing this interfaceprotected <T extends BytesMessage>
Tbyte[]getArray()Returns a reference to the payload (byte array).intReturns the length of the byte[] array payload.<T> TGets an object from the payload.<T> TgetObject(ClassLoader loader) Uses custom serialization to create an object from the array of the message.intReturns the offset of the byte[] array at which user data starts.shortgetType()Returns the type of the message, e.g.booleanhasArray()Returns true if this message has a byte[] array as payload (even if it's null!), false otherwisebooleanReturns true if the message has a payload, e.g.voidreadPayload(DataInput in) setArray(byte[] b, int offset, int length) Sets the internal array to point to a subset of a given array.Sets the arraysetFlag(Message.Flag... flags) Sets a number of flags in a messageTakes an object and uses Java serialization to generate the byte array which is set in the message.intsize()Returns the exact size of the marshalled messageprotected intvoidwritePayload(DataOutput out) Methods inherited from class org.jgroups.BaseMessage
clearFlag, clearFlag, clearHeaders, copy, createHeaders, getDest, getFlags, getHeader, getHeaders, getNumHeaders, getPayload, getSrc, headers, headers, isFlagSet, isFlagSet, printHeaders, putHeader, putHeader, putHeaderIfAbsent, readFrom, serializedSize, setDest, setFlag, setFlag, setFlagIfAbsent, setPayload, setSrc, toString, writeTo, writeToNoAddrs
-
Field Details
-
array
protected byte[] arrayThe payload -
offset
protected int offsetThe index into the payload -
length
protected int lengthThe number of bytes in the array
-
-
Constructor Details
-
BytesMessage
public BytesMessage() -
BytesMessage
Constructs a message given a destination address- Parameters:
dest- The Address of the receiver. If it is null, then the message is sent to all cluster members. Otherwise, it is sent to a single member.
-
BytesMessage
Constructs a message given a destination and source address and the payload byte array- Parameters:
dest- The Address of the receiver. If it is null, then the message is sent to all cluster members. Otherwise, it is sent to a single member.array- The payload. Note that this array must not be modified (e.g. buf[0]='x' is not allowed) since we don't copy the contents.
-
BytesMessage
Constructs a message. The index and length parameters provide a reference to a byte array, rather than a copy, and refer to a subset of the array. This is important when we want to avoid copying. When the message is serialized, only the subset is serialized.Note that the byte array passed as argument must not be modified. Reason: if we retransmit the message, it would still have a ref to the original byte array passed in as argument, and so we would retransmit a changed byte array !
- Parameters:
dest- The Address of the receiver. If it is null, then the message is sent to all cluster members. Otherwise, it is sent to a single member.array- A reference to a byte arrayoffset- The index into the byte arraylength- The number of bytes to be used from buf. Both index and length are checked for array index violations and an ArrayIndexOutOfBoundsException will be thrown if invalid
-
BytesMessage
-
BytesMessage
Constructs a message given a destination and source address and the payload object- Parameters:
dest- The Address of the receiver. If it is null, then the message is sent to all cluster members. Otherwise, it is sent to a single member.obj- The object that will be marshalled into the byte array. Has to be serializable (e.g. implementing Serializable, Externalizable or Streamable, or be a basic type (e.g. Integer, Short etc)).
-
-
Method Details
-
setFlag
Description copied from class:BaseMessageSets a number of flags in a message- Specified by:
setFlagin interfaceMessage- Overrides:
setFlagin classBaseMessage- Parameters:
flags- The flag or flags- Returns:
- A reference to the message
-
create
Description copied from interface:ConstructableCreates an instance of the class implementing this interface -
getType
public short getType()Description copied from interface:MessageReturns the type of the message, e.g. BYTES_MSG, OBJ_MSG etc -
hasPayload
public boolean hasPayload()Description copied from interface:MessageReturns true if the message has a payload, e.g. a byte[] array in aBytesMessageor an object in anObjectMessage. This is more generic thanMessage.hasArray(), as it is not just applicable to a byte array.- Returns:
- True if the message has a payload
-
hasArray
public boolean hasArray()Description copied from interface:MessageReturns true if this message has a byte[] array as payload (even if it's null!), false otherwise -
getOffset
public int getOffset()Description copied from interface:MessageReturns the offset of the byte[] array at which user data starts. Throws an exception if the message does not have a byte[] array payload (ifMessage.hasArray()is false).Note that this is a convenience method, as most messages are of type
BytesMessage. -
getLength
public int getLength()Description copied from interface:MessageReturns the length of the byte[] array payload. If the message does not have a byte[] array payload (Message.hasArray()is false), then the serialized size may be returned, or an implementation may choose to throw an exception -
getArray
public byte[] getArray()Returns a reference to the payload (byte array). Note that this array should not be modified as we do not copy the array on copy() or clone(): the array of the copied message is simply a reference to the old array.Even if offset and length are used: we return the entire array, not a subset.
-
setArray
Sets the internal array to point to a subset of a given array.Note that the byte array passed as argument must not be modified. Reason: if we retransmit the message, it would still have a ref to the original byte array passed in as argument, and so we would retransmit a changed byte array !
- Parameters:
b- The reference to a given array. If null, we'll reset the array to nulloffset- The initial positionlength- The number of bytes
-
setArray
Sets the arrayNote that the byte array passed as argument must not be modified. Reason: if we retransmit the message, it would still have a ref to the original byte array passed in as argument, and so we would retransmit a changed byte array !
-
setObject
Takes an object and uses Java serialization to generate the byte array which is set in the message. Parameter 'obj' has to be serializable (e.g. implementing Serializable, Externalizable or Streamable, or be a basic type (e.g. Integer, Short etc)). -
getObject
public <T> T getObject()Description copied from interface:MessageGets an object from the payload. If the payload is a byte[] array (e.g. as inBytesMessage), an attempt to de-serialize the array into an object is made, and the object returned.If the payload is an object (e.g. as is the case in
ObjectMessage), the object will be returned directly. -
getObject
Uses custom serialization to create an object from the array of the message. Note that this is dangerous when using your own classloader, e.g. inside of an application server ! Most likely, JGroups will use the system classloader to deserialize the array into an object, whereas (for example) a web application will want to use the webapp's classloader, resulting in a ClassCastException. The recommended way is for the application to use their own serialization and only pass byte array to JGroups.As of 3.5, a classloader can be passed in. It will be used first to find a class, before contacting the other classloaders in the list. If null, the default list of classloaders will be used.
- Returns:
- the object
-
size
public int size()Description copied from interface:MessageReturns the exact size of the marshalled message- Specified by:
sizein interfaceMessage- Overrides:
sizein classBaseMessage- Returns:
- The number of bytes for the marshalled message
-
copyPayload
Copies the byte array. If offset and length are used (to refer to another array), the copy will contain only the subset that offset and length point to, copying the subset into the new copy.Note that for headers, only the arrays holding references to the headers are copied, not the headers themselves ! The consequence is that the headers array of the copy hold the *same* references as the original, so do *not* modify the headers ! If you want to change a header, copy it and call
BaseMessage.putHeader(short,Header)again.- Overrides:
copyPayloadin classBaseMessage
-
sizeOfPayload
protected int sizeOfPayload() -
writePayload
- Throws:
IOException
-
readPayload
- Throws:
IOException
-
createMessage
-