У меня есть класс Java
public class MsgLayout{
int field1;
String field2;
long field3;
}
Я должен записать этот объект в виде байтового массива в выходной поток Socket.Три поля (переменные экземпляра) имеют макет.то есть field1
должен занимать 1 байт, field2
должен занимать 4 байта и field3
должен занимать 8 байтов.
ByteBuffer bbf = ByteBuffer.allocate(TOTAL_SIZE);
bbf.put(Integer.toString(this.getField1()).getBytes(), 0, FIELD1_SIZE);
bbf.position(FIELD2_OFFSET);
bbf.put(Long.toString(this.getField2()).getBytes(), 0, FIELD2_SIZE);
bbf.position(FIELD3_OFFSET);
bbf.put(Long.toString(this.getField3()).getBytes(), 0, FIELD3_SIZE);
byte[] msg = bbf.array();
Используя приведенный выше код, я пытаюсь вписать каждое поле в байтовый массивв соответствии с желаемым размером.Но я получаю IndexOutOfBoundException
Короче говоря, проблема заключается в том, как подогнать поля под размер, определенный макетом.Например, FIELD1_OFFSET = 0, FIELD1_SIZE=1, FIELD2_OFFSET=1, FIELD2_SIZE=4, FIELD3_OFFSET=5, FIELD3_SIZE=8.
Теперь, когда я конвертирую field1
в строку, он не помещается в 1 байт при преобразовании в байт [].Если я не конвертирую в String и не использую putInt (int), он записывает 4 байта в результирующий байтовый массив.