Class Message
- Direct Known Subclasses:
AddressMessage
,Block
,BloomFilter
,ChildMessage
,EmptyMessage
,FeeFilterMessage
,FilteredBlock
,GetBlocksMessage
,GetUTXOsMessage
,HeadersMessage
,ListMessage
,MemoryPoolMessage
,PartialMerkleTree
,Ping
,Pong
,RejectMessage
,UTXOsMessage
,VersionMessage
A Message is a data structure that can be serialized/deserialized using the Bitcoin serialization format. Specific types of messages that are used both in the block chain, and on the wire, are derived from this class.
Instances of this class are not safe for use by multiple threads.
-
Field Summary
Modifier and TypeFieldDescriptionprotected int
protected int
static final int
protected int
protected NetworkParameters
protected byte[]
protected boolean
protected MessageSerializer
static final int
-
Constructor Summary
ModifierConstructorDescriptionprotected
Message()
protected
Message
(NetworkParameters params) protected
Message
(NetworkParameters params, byte[] payload, int offset) protected
Message
(NetworkParameters params, byte[] payload, int offset, MessageSerializer serializer, int length) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
adjustLength
(int newArraySize, int adjustment) byte[]
Returns a copy of the array returned byunsafeBitcoinSerialize()
, which is safe to mutate.final void
bitcoinSerialize
(OutputStream stream) Serialize this message to the provided OutputStream using the bitcoin wire format.protected void
bitcoinSerializeToStream
(OutputStream stream) Serializes this message to the provided stream.getHash()
This method is a NOP for all classes except Block and Transaction.final int
This returns a correct value by parsing the message.Network parameters this message was created with.protected boolean
boolean
isCached()
used for unit testingboolean
protected abstract void
parse()
protected byte
readByte()
protected byte[]
protected byte[]
readBytes
(int length) protected Sha256Hash
readHash()
protected long
protected String
readStr()
protected long
protected BigInteger
protected VarInt
protected VarInt
readVarInt
(int offset) void
setSerializer
(MessageSerializer serializer) Overrides the message serializer.protected void
unCache()
To be called before any change of internal values including any setters.byte[]
Serialize this message to a byte array that conforms to the bitcoin wire protocol.
-
Field Details
-
MAX_SIZE
public static final int MAX_SIZE- See Also:
-
UNKNOWN_LENGTH
public static final int UNKNOWN_LENGTH- See Also:
-
offset
protected int offset -
cursor
protected int cursor -
length
protected int length -
payload
protected byte[] payload -
recached
protected boolean recached -
serializer
-
params
-
-
Constructor Details
-
Message
protected Message() -
Message
-
Message
protected Message(NetworkParameters params, byte[] payload, int offset, MessageSerializer serializer, int length) throws ProtocolException - Parameters:
params
- NetworkParameters object.payload
- Bitcoin protocol formatted byte array containing message content.offset
- The location of the first payload byte within the array.serializer
- the serializer to use for this message.length
- The length of message payload if known. Usually this is provided when deserializing of the wire as the length will be provided as part of the header. If unknown then set to Message.UNKNOWN_LENGTH- Throws:
ProtocolException
-
Message
- Throws:
ProtocolException
-
-
Method Details
-
parse
- Throws:
ProtocolException
-
unCache
protected void unCache()To be called before any change of internal values including any setters. This ensures any cached byte array is removed.
Child messages of this object(e.g. Transactions belonging to a Block) will not have their internal byte caches invalidated unless they are also modified internally.
-
adjustLength
protected void adjustLength(int newArraySize, int adjustment) -
isCached
public boolean isCached()used for unit testing -
isRecached
public boolean isRecached() -
setSerializer
Overrides the message serializer.- Parameters:
serializer
- the new serializer
-
bitcoinSerialize
public byte[] bitcoinSerialize()Returns a copy of the array returned byunsafeBitcoinSerialize()
, which is safe to mutate. If you need extra performance and can guarantee you won't write to the array, you can use the unsafe version.- Returns:
- a freshly allocated serialized byte array
-
unsafeBitcoinSerialize
public byte[] unsafeBitcoinSerialize()Serialize this message to a byte array that conforms to the bitcoin wire protocol.
This method may return the original byte array used to construct this message if the following conditions are met:
- 1) The message was parsed from a byte array with parseRetain = true
- 2) The message has not been modified
- 3) The array had an offset of 0 and no surplus bytes
If condition 3 is not met then an copy of the relevant portion of the array will be returned. Otherwise a full serialize will occur. For this reason you should only use this API if you can guarantee you will treat the resulting array as read only.
- Returns:
- a byte array owned by this object, do NOT mutate it.
-
bitcoinSerialize
Serialize this message to the provided OutputStream using the bitcoin wire format.- Parameters:
stream
-- Throws:
IOException
-
bitcoinSerializeToStream
Serializes this message to the provided stream. If you just want the raw bytes use bitcoinSerialize().- Throws:
IOException
-
getHash
This method is a NOP for all classes except Block and Transaction. It is only declared in Message so BitcoinSerializer can avoid 2 instanceof checks + a casting. -
getMessageSize
public final int getMessageSize()This returns a correct value by parsing the message. -
readUint32
- Throws:
ProtocolException
-
readInt64
- Throws:
ProtocolException
-
readUint64
- Throws:
ProtocolException
-
readVarInt
- Throws:
ProtocolException
-
readVarInt
- Throws:
ProtocolException
-
readBytes
- Throws:
ProtocolException
-
readByte
- Throws:
ProtocolException
-
readByteArray
- Throws:
ProtocolException
-
readStr
- Throws:
ProtocolException
-
readHash
- Throws:
ProtocolException
-
hasMoreBytes
protected boolean hasMoreBytes() -
getParams
Network parameters this message was created with.
-