QByteArray上的QDataStream:在对DataStream进行写操作('<<')之间从数组('[]')读取是否安全?

时间:2019-05-16 10:05:17

标签: c++ qt serialization

我正在使用QDataStream将数据(使用流的<<运算符)序列化为QByteArray。但是我一直想知道:在QByteArray个操作之间从基础<<读取是否安全(或者我可能遇到例如缓冲问题)?

quint8 sumBytes(const QByteArray& byteArray)
{
    //This will overflow quickly...
    quint8 result = 0;
    for (int i = 0; i < byteArray.size(); i++)
        result += static_cast<quint8>(byteArray[i]);
    return result;
}

QByteArrary createByteArray(qint32 foo, qint32 bar)
{
    QByteArray array;
    QDataStream stream(&array, QIODevice::ReadWrite);
    stream<< foo;
    stream<< bar;
    // Safe to access array below?
    const quint8 byteSum = sumBytes(array);
    stream<< byteSum;
    return array;
}

我已经检查了QDataStreamQByteArray的文档,但没有发现任何相关内容,只是提到QDataStream使用QBuffer,因为QByteArray不是QIoDevice(这使我提出了这个问题)。再次,QDataStream不提供flush()(或类似方法),所以这可能是安全的……?

1 个答案:

答案 0 :(得分:1)

好的。请记住,您已经将const的{​​{1}}版本传递到QByteArray中,以确保不会更改对象的内部状态。

您还可以考虑使用.at()

  

sumBytes可以比at()更快,因为它永远不会导致出现深层复制。

(source)