我正在Qt中编写一个允许来自字节数组的视频流的应用程序。 作为视频输出组件,我正在使用QtAV(http://www.qtav.org/)。 在我的例子中,这个组件的输入是一个QIODevice(QBuffer),其中有一个QByteArray和我的数据。 我将在流式传输期间放入QByteArray中的数据,但我不知道如何删除我还没读过的数据。 我的问题是,经过一段时间后,QByteArray的维度非常大,我不知道如何减少分配的内存。
谢谢
安吉洛
答案 0 :(得分:0)
您可以使用方法
从缓冲区中获取对字节数组对象的引用
QByteArray &QBuffer::buffer()
然后将其删除:
your_io_buffer.buffer().resize(0);
但是请注意,频繁删除和向动态数组附加数据会导致内存重新分配,这不是那么快的操作。因此我建议使用
void QByteArray::reserve(int size)
方法:
QByteArray buf;
buf.reserve(100000);
//...
your_io_buffer.setBuffer(&buf);
//...