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