我如何操作QByteArray对象而不复制它?

时间:2019-12-06 07:12:12

标签: c++ qt

bool processData(const QByteArray & data)
{
    QStringRef qf(data);
    QList<QStringRef> splitted = qf.slit(",")
}

考虑一下QByteArray中有大量数据。我想进行搜索,分析并将其一小部分复制到QString。不复制该怎么办?

1 个答案:

答案 0 :(得分:1)

根据Qt document

  

QByteArray可用于存储原始字节(包括“ \ 0”)和   传统的8位以'\ 0'结尾的字符串。使用QByteArray是很多   比使用const char *更方便。在幕后,它总是   确保数据后跟一个'\ 0'终止符,并使用   隐式共享(写时复制)以减少内存使用并避免   无需复制数据

因此,如果您确实不修改数据,则不必担心复制费用。

bool processFundRankData(const QByteArray & data)
{
    int firstIndexOfCR = data.indexOf(`\r`);
    QByteArray firstFour = data.left(4);
}

实际上,QByteArrayQString一样,具有最多的“字符串”操作。因此,无需将其分配给QStringQStringRef