]
Bela Ban updated JGRP-2122:
---------------------------
Labels: Beta3 (was: )
Streamable class might implement SizeStreamable
-----------------------------------------------
Key: JGRP-2122
URL:
https://issues.jboss.org/browse/JGRP-2122
Project: JGroups
Issue Type: Enhancement
Reporter: Bela Ban
Assignee: Bela Ban
Labels: Beta3
Fix For: 4.0
Many classes implement Streamable, but also provide a serializedSize() method which
returns the number of bytes needed for the serialized form.
Methods like Util.streamableToBuffer() could benefit from this: instead of allocating a
512 byte buffer, which is either too big or needs to be resized later, we can allocate a
buffer of the exact size.
We should therefore make all classes implementing Streamable instead implement
SizeStreamable.
Code that makes use of this:
{code:java|title=Util.streamableToBuffer()|borderStyle=solid}
public static Buffer streamableToBuffer(Streamable obj) {
int expected_size=obj instanceof SizeStreamable?
((SizeStreamable)obj).serializedSize() +1 : 512;
final ByteArrayDataOutputStream out=new
ByteArrayDataOutputStream(expected_size);
try {
Util.writeStreamable(obj,out);
return out.getBuffer();
}
catch(Exception ex) {
return null;
}
}
{code}