QDataStream для QByteArray: безопасно ли читать из массива ('[]') между записями в DataStream ('<<')? - PullRequest
0 голосов
/ 16 мая 2019

Я использую 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;
}

Я проверил документациюдля QDataStream и QByteArray, но не увидел ничего релевантного, кроме упоминания о том, что QDataStream использует QBuffer, поскольку QByteArray не является QIoDevice (что заставило меня задать этот вопрос).И все же, QDataStream не предоставляет flush() (или подобный метод), так что это может быть безопасно ...?

1 Ответ

1 голос
/ 16 мая 2019

Конечно.Помните, что вы передали const версию вашего QByteArray в sumBytes, что гарантирует, что внутреннее состояние объекта не изменится.

Вы также можете рассмотреть возможность использования .at():

at() может быть быстрее, чем operator[](), потому что это никогда не вызывает глубокого копирования.

(источник)

...