首页 > 解决方案 > QByteArray 上的 QDataStream:在 DataStream ('<<') 上的写入之间从数组 ('[ ]') 读取是否安全?

问题描述

我正在使用 aQDataStream将数据(使用流的<<运算符)序列化为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使用 a QBufferas QByteArrayis not a QIoDevice(这让我问了这个问题)。再一次,QDataStream不提供flush()(或类似的方法),所以它可能是安全的......?

标签: c++qtserialization

解决方案


当然。请记住,您已经传递了一个const版本的QByteArrayinto sumBytes,它保证对象的内部状态不会改变。

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

at()可以比 快operator[](),因为它永远不会导致发生深拷贝。

(资源)


推荐阅读