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:
Util.streamableToBuffer()
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; } }