Problem
I need to convert two ints and a string of variable length to bytes.
What I did
I converted each data type into a byte array and then added them into a byte buffer. Of which right after that I will copy that buffer to one byte array, as shown below.
byte[] nameByteArray = cityName.getBytes();
byte[] xByteArray = ByteBuffer.allocate(4).putInt(x).array();
byte[] yByteArray = ByteBuffer.allocate(4).putInt(y).array();
ByteBuffer byteBuffer = ByteBuffer.allocate(nameByteArray.length + xByteArray.length + yByteArray.length);
Now that seems a little redundant. I can certainly place everything into byte buffer and convert that to a byte array. However, I have no idea what I string length is. So how would I allocate the byte buffer in this case? (to allocate a byte buffer you must specify its capacity)
As you can not put a String into a ByteBuffer directly you always have to convert it to a byte array first. And if you have it in byte array form you know it's length.
Therefore the optimized version should look like this:
byte[] nameByteArray = cityName.getBytes();
ByteBuffer byteBuffer = ByteBuffer.allocate(nameByteArray.length + 8);
byteBuffer.put(nameByteArray);
byteBuffer.putInt(x);
byteBuffer.putInt(y);