ByteBuffer and Byte Array

darksky picture darksky · Aug 31, 2011 · Viewed 25.9k times · Source

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)

Answer

Robert picture Robert · Aug 31, 2011

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);