开发者

ByteBuffer and Byte Array

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 开发者_如何学Pythonadded 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);


Assuming that you want everything in one bytebuffer why can you not do the following

ByteBuffer byteBuffer = ByteBuffer.allocate( cityName.getBytes().length+ 4+ 4);
byteBuffer.put(cityName.getBytes()).putInt(x).putInt(y);


Unless you restrict the maximum length of the string you will always need to dynamically calculate the number of bytes required to store the string. If you restrict the string to a maximum length then you can calculate ahead of time the maximum number of bytes to store any string and allocate an appropriate sized ByteBuffer. Although not required for the simple example you gave, you may want to consider storing the string byte length as well as the string. Then when reading back the data you know how many bytes make up your string.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜