Я пишу приложение в Qt, которое позволяет потоковое видео из массива байтов.
В качестве компонента вывода видео я использую QtAV (http://www.qtav.org/).
В моем случае вход этого компонента — QIODevice (QBuffer), где есть QByteArray с моими данными.
Я буду помещать во время потоковой передачи данных внутри QByteArray, но я не знаю, как удалить данные, которые я еще прочитал.
Моя проблема в том, что через некоторое время размерность QByteArray очень велика, и я не знаю, как я могу уменьшить выделенную память.
Спасибо
Angelo
Вы можете просто получить ссылку на объект байтового массива из вашего буфера, используя метод
QByteArray &QBuffer::buffer()
а затем стереть это:
your_io_buffer.buffer().resize(0);
Но учтите, что частое удаление и добавление данных в динамический массив приведет к перераспределению памяти, что не является такой быстрой операцией. Поэтому я рекомендую использовать
void QByteArray::reserve(int size)
метод:
QByteArray buf;
buf.reserve(100000);
//...
your_io_buffer.setBuffer(&buf);
//...
Других решений пока нет …