Переменный массив байтов в java

Я читаю двоичный файл со структурой:

(целое число) (байт [])

Целое число представляет собой размер следующего массива байтов. Чтобы не выделять все время массив байтов, я просто выделяю, когда размер следующего чтения больше, чем последний.

int sz = rawBuffer.getInt();
if (sz > lSz){  //lSz is a class variable
   buffer = new byte[sz];
   lSz = sz;
}
rawBuffer.get(buffer, 0, sz);

Проблема в том, что буфер всегда имеет максимальный размер. Если прочитать массив байтов размера 5 и массив байтов размера 3, то значение buffer.length будет равно 5.

Можно ли как-то изменить размер буфера без перераспределения? Или лучше иметь другую структуру, которая содержит эффективный размер массива, например, ByteBuffer.


person p.magalhaes    schedule 07.07.2015    source источник
comment
Действительно ли память здесь критична? Рассматривали ли вы возможность использования ArrayList?   -  person Sam Estep    schedule 07.07.2015
comment
Проблема заключается в накладных расходах на выделение памяти. Я собираюсь сделать это миллионы раз.   -  person p.magalhaes    schedule 07.07.2015


Ответы (1)


Я не думаю, что можно было бы изменить размер буфера без процесса перераспределения. Так что если размер буфера для вас критичен, можно попробовать изменить свой

if (sz > lSz){  //lSz is a class variable
   buffer = new byte[sz];
   lSz = sz;
}

to

if (sz != lSz){
   buffer = new byte[sz];
   lSz = sz;
}

Удачи.

person STaefi    schedule 07.07.2015