Класс QDataStream
Класс QDataStream предоставляет сериализацию двоичных данных в QIODevice. Подробнее...
| Заголовок: | #include <QDataStream> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследуется от: | QIODeviceBase |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые типы
| перечисление | ByteOrder { BigEndian, LittleEndian } |
| перечисление | FloatingPointPrecision { SinglePrecision, DoublePrecision } |
| перечисление | Status { Ok, ReadPastEnd, ReadCorruptData, WriteFailed } |
| перечисление | Version { Qt_1_0, Qt_2_0, Qt_2_1, Qt_3_0, Qt_3_1, …, Qt_6_1 } |
Открытые функции
| QDataStream(const QByteArray &a) | |
| QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode) | |
| QDataStream(QIODevice *d) | |
| QDataStream() | |
| ~QDataStream() | |
| void | прерватьТранзакцию() |
| bool | достигКонеца() const |
| QDataStream::ByteOrder | порядокБайтов() const |
| bool | зафиксироватьТранзакцию() |
| QIODevice * | устройство() const |
| QDataStream::FloatingPointPrecision | точностьЧиселСПлавающейТочкой() const |
| QDataStream & | читатьБайты(char *&s, uint &l) |
| int | читатьНеобработанныеДанные(char *s, int len) |
| void | сброситьСостояние() |
| void | отменитьТранзакцию() |
| void | установитьПорядокБайтов(QDataStream::ByteOrder bo) |
| void | установитьУстройство(QIODevice *d) |
| void | установитьТочностьЧиселСПлавающейТочкой(QDataStream::FloatingPointPrecision precision) |
| void | установитьСостояние(QDataStream::Status status) |
| void | установитьВерсию(int v) |
| int | пропуститьНеобработанныеДанные(int len) |
| void | начатьТранзакцию() |
| QDataStream::Status | состояние() const |
| int | версия() const |
| QDataStream & | записатьБайты(const char *s, uint len) |
| int | записатьНеобработанныеДанные(const char *s, int len) |
| QDataStream & | operator<<(qint8 i) |
| QDataStream & | operator<<(quint8 i) |
| QDataStream & | operator<<(qint16 i) |
| QDataStream & | operator<<(quint16 i) |
| QDataStream & | operator<<(qint32 i) |
| QDataStream & | operator<<(quint32 i) |
| QDataStream & | operator<<(qint64 i) |
| QDataStream & | operator<<(quint64 i) |
| QDataStream & | operator<<(std::nullptr_t ptr) |
| QDataStream & | operator<<(bool i) |
| QDataStream & | operator<<(qfloat16 f) |
| QDataStream & | operator<<(float f) |
| QDataStream & | operator<<(double f) |
| QDataStream & | operator<<(const char *s) |
| QDataStream & | operator<<(char16_t c) |
| QDataStream & | operator<<(char32_t c) |
| QDataStream & | operator>>(qint8 &i) |
| QDataStream & | operator>>(quint8 &i) |
| QDataStream & | operator>>(qint16 &i) |
| QDataStream & | operator>>(quint16 &i) |
| QDataStream & | operator>>(qint32 &i) |
| QDataStream & | operator>>(quint32 &i) |
| QDataStream & | operator>>(qint64 &i) |
| QDataStream & | operator>>(quint64 &i) |
| QDataStream & | operator>>(std::nullptr_t &ptr) |
| QDataStream & | operator>>(bool &i) |
| QDataStream & | operator>>(qfloat16 &f) |
| QDataStream & | operator>>(float &f) |
| QDataStream & | operator>>(double &f) |
| QDataStream & | operator>>(char *&s) |
| QDataStream & | operator>>(char16_t &c) |
| QDataStream & | operator>>(char32_t &c) |
Связанные нечлены
| QDataStreamIfHasOStreamOperators<T1, T2> | operator<<(QDataStream &out, const std::pair<T1, T2> &pair) |
| QDataStreamIfHasIStreamOperators<T1, T2> | operator>>(QDataStream &in, std::pair<T1, T2> &pair) |
Подробное описание
Поток данных — это двоичный поток закодированной информации, который на 100% независим от операционной системы, процессора или порядка байтов хост-компьютера. Например, поток данных, записанный ПК под управлением Windows, может быть прочитан Sun SPARC, работающим под Solaris.
Также можно использовать поток данных для чтения/записи незакодированных двоичных данных. Если нужен поток ввода для "парсинга", обратитесь к QTextStream.
Класс QDataStream реализует сериализацию основных типов данных C++, таких как char, short, int, char *, и т. д. Сериализация более сложных данных выполняется путём разделения данных на примитивные единицы.
Поток данных тесно взаимодействует с QIODevice. QIODevice представляет собой устройство ввода/вывода, из которого можно читать данные и в которое можно записывать данные. Пример устройства ввода/вывода — класс QFile.
Пример (запись двоичных данных в поток):
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file); // we will serialize the data into the file
out << QString("the answer is"); // serialize a string
out << (qint32)42; // serialize an integer Пример (чтение двоичных данных из потока):
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file); // read the data serialized from the file
QString str;
qint32 a;
in >> str >> a; // extract "the answer is" and 42 Каждый элемент, записанный в поток, записывается в предопределённом двоичном формате, который зависит от типа элемента. Поддерживаемые типы Qt включают QBrush, QColor, QDateTime, QFont, QPixmap, QString, QVariant и многие другие. Полный список всех типов Qt, поддерживающих потоковую передачу данных, см. в разделе Сериализация типов данных Qt.
Для целых чисел лучше всегда преобразовывать их в тип целого числа Qt при записи и считывать обратно в тот же тип целого числа Qt. Это гарантирует, что вы получите целые числа нужного размера и защитит вас от различий в компиляторах и платформах.
Перечисления могут сериализоваться через QDataStream без необходимости ручного определения операторов потоковой передачи. Классы перечислений сериализуются с использованием объявленного размера.
Например, строка char * записывается как 32-битное целое число, равное длине строки, включая байт '\0', за которым следуют все символы строки, включая байт '\0'. При чтении строки char * сначала считываются 4 байта для создания значения 32-битной длины, а затем столько символов для строки char * включая завершающий символ '\0'.
Устройство ввода/вывода обычно задаётся в конструкторе, но может быть изменено с помощью setDevice(). Если вы достигли конца данных (или если устройство ввода/вывода не задано), atEnd() вернёт true.
Версионирование
Двоичный формат QDataStream эволюционировал с Qt 1.0 и, вероятно, будет продолжать эволюционировать, отражая изменения в Qt. При вводе или выводе сложных типов очень важно убедиться, что используется та же версия потока (version()), что и для чтения и записи. Если вам нужна как обратная, так и прямая совместимость, вы можете закодировать номер версии в приложении:
stream.setVersion(QDataStream::Qt_4_0);
Если вы создаёте новый двоичный формат данных, например, формат файла для документов, созданных вашим приложением, вы можете использовать QDataStream для записи данных в переносимый формат. Обычно вы записываете краткое заголовок, содержащий магическую строку и номер версии, чтобы дать себе пространство для будущих расширений. Например:
QFile file("file.xxx");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
// Write a header with a "magic number" and a version
out << (quint32)0xA0B0C0D0;
out << (qint32)123;
out.setVersion(QDataStream::Qt_4_0);
// Write the data
out << lots_of_interesting_data; Затем прочитайте его с помощью:
QFile file("file.xxx");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
// Read and check the header
quint32 magic;
in >> magic;
if (magic != 0xA0B0C0D0)
return XXX_BAD_FILE_FORMAT;
// Read the version
qint32 version;
in >> version;
if (version < 100)
return XXX_BAD_FILE_TOO_OLD;
if (version > 123)
return XXX_BAD_FILE_TOO_NEW;
if (version <= 110)
in.setVersion(QDataStream::Qt_3_2);
else
in.setVersion(QDataStream::Qt_4_0);
// Read the data
in >> lots_of_interesting_data;
if (version >= 120)
in >> data_new_in_XXX_version_1_2;
in >> other_interesting_data; Вы можете выбрать порядок байтов, используемый при сериализации данных. По умолчанию используется порядок байтов big endian (MSB first). Изменение его на little endian нарушает переносимость (если читатель также не изменит на little endian). Мы рекомендуем сохранить это значение, если у вас нет особых требований.
Чтение и запись необработанных двоичных данных
Вам может потребоваться напрямую читать/записывать свои собственные сырые двоичные данные в/из потока данных. Данные могут быть считаны из потока в предварительно выделенный char * с помощью readRawData(). Аналогично, данные могут быть записаны в поток с помощью writeRawData(). Обратите внимание, что все кодирование/декодирование данных должно быть выполнено вами.
Аналогичная пара функций — readBytes() и writeBytes(). Они отличаются от своих сырых аналогов следующим образом: readBytes() считывает quint32, который принимается за длину считываемых данных, затем столько байтов считывается в предварительно выделенный char *; writeBytes() записывает quint32, содержащий длину данных, за которой следуют сами данные. Обратите внимание, что все кодирование/декодирование данных (кроме quint32 длины) должно быть выполнено вами.
Чтение и запись коллекций Qt
Классы контейнеров Qt также могут сериализоваться в QDataStream. К ним относятся QList, QSet, QHash и QMap. Операторы потоковой передачи объявляются как не члены классов.
Чтение и запись других классов Qt
В дополнение к перегруженным операторам потоковой передачи, описанным здесь, любые классы Qt, которые вы можете захотеть сериализовать в QDataStream, будут иметь соответствующие операторы потоковой передачи, объявленные как не члены класса:
QDataStream &operator<<(QDataStream &, const QXxx &);
QDataStream &operator>>(QDataStream &, QXxx &); Например, вот операторы потоковой передачи, объявленные как не члены класса QImage:
QDataStream & operator<< (QDataStream& stream, const QImage& image);
QDataStream & operator>> (QDataStream& stream, QImage& image); Чтобы узнать, есть ли у вашего любимого класса Qt аналогичные операторы потоковой передачи, см. раздел «Связанные не члены» на странице документации класса.
Использование транзакций чтения
Когда поток данных работает с асинхронным устройством, фрагменты данных могут поступать в произвольные моменты времени. Класс QDataStream реализует механизм транзакций, который предоставляет возможность атомарного чтения данных с помощью ряда операторов потоковой передачи. Например, вы можете обрабатывать неполные чтения из сокета, используя транзакцию в слоте, подключенном к сигналу readyRead():
in.startTransaction();
QString str;
qint32 a;
in >> str >> a; // try to read packet atomically
if (!in.commitTransaction())
return; // wait for more data Если не получен полный пакет, этот код восстанавливает поток в начальное положение, после чего вам необходимо дождаться поступления дополнительных данных.
См. также QTextStream и QVariant.
Документация по типам-членам
перечисление QDataStream::ByteOrder
Порядок байтов, используемый для чтения/записи данных.
| Константа | Значение | Описание |
|---|---|---|
QDataStream::BigEndian |
QSysInfo::BigEndian |
Байт с наибольшим значением впереди (по умолчанию) |
QDataStream::LittleEndian |
QSysInfo::LittleEndian |
Байт с наименьшим значением впереди |
перечисление QDataStream::FloatingPointPrecision
Точность чисел с плавающей запятой, используемая для чтения/записи данных. Это повлияет только в том случае, если версия потока данных равна или выше Qt_4_6.
Предупреждение: Точность чисел с плавающей запятой должна быть установлена в одинаковое значение для объекта, который записывает, и объекта, который считывает поток данных.
| Константа | Значение | Описание |
|---|---|---|
QDataStream::SinglePrecision |
0 |
Все числа с плавающей запятой в потоке данных имеют 32-битную точность. |
QDataStream::DoublePrecision |
1 |
Все числа с плавающей запятой в потоке данных имеют 64-битную точность. |
См. также setFloatingPointPrecision() и floatingPointPrecision().
перечисление QDataStream::Status
Это перечисление описывает текущий статус потока данных.
| Константа | Значение | Описание |
|---|---|---|
QDataStream::Ok |
0 |
Поток данных работает нормально. |
QDataStream::ReadPastEnd |
1 |
Поток данных прочитал данные за пределами конца данных в базовом устройстве. |
QDataStream::ReadCorruptData |
2 |
Поток данных прочитал повреждённые данные. |
QDataStream::WriteFailed |
3 |
Поток данных не может записать в базовое устройство. |
перечисление QDataStream::Version
Это перечисление предоставляет символические синонимы для номеров версий формата сериализации данных.
| Константа | Значение | Описание |
|---|---|---|
QDataStream::Qt_1_0 |
1 |
Версия 1 (Qt 1.x) |
QDataStream::Qt_2_0 |
2 |
Версия 2 (Qt 2.0) |
QDataStream::Qt_2_1 |
3 |
Версия 3 (Qt 2.1, 2.2, 2.3) |
QDataStream::Qt_3_0 |
4 |
Версия 4 (Qt 3.0) |
QDataStream::Qt_3_1 |
5 |
Версия 5 (Qt 3.1, 3.2) |
QDataStream::Qt_3_3 |
6 |
Версия 6 (Qt 3.3) |
QDataStream::Qt_4_0 |
7 |
Версия 7 (Qt 4.0, Qt 4.1) |
QDataStream::Qt_4_1 |
Qt_4_0 |
Версия 7 (Qt 4.0, Qt 4.1) |
QDataStream::Qt_4_2 |
8 |
Версия 8 (Qt 4.2) |
QDataStream::Qt_4_3 |
9 |
Версия 9 (Qt 4.3) |
QDataStream::Qt_4_4 |
10 |
Версия 10 (Qt 4.4) |
QDataStream::Qt_4_5 |
11 |
Версия 11 (Qt 4.5) |
QDataStream::Qt_4_6 |
12 |
Версия 12 (Qt 4.6, Qt 4.7, Qt 4.8) |
QDataStream::Qt_4_7 |
Qt_4_6 |
То же, что и Qt_4_6. |
QDataStream::Qt_4_8 |
Qt_4_7 |
То же, что и Qt_4_6. |
QDataStream::Qt_4_9 |
Qt_4_8 |
То же, что и Qt_4_6. |
QDataStream::Qt_5_0 |
13 |
Версия 13 (Qt 5.0) |
QDataStream::Qt_5_1 |
14 |
Версия 14 (Qt 5.1) |
QDataStream::Qt_5_2 |
15 |
Версия 15 (Qt 5.2) |
QDataStream::Qt_5_3 |
Qt_5_2 |
То же, что и Qt_5_2 |
QDataStream::Qt_5_4 |
16 |
Версия 16 (Qt 5.4) |
QDataStream::Qt_5_5 |
Qt_5_4 |
То же, что и Qt_5_4 |
QDataStream::Qt_5_6 |
17 |
Версия 17 (Qt 5.6) |
QDataStream::Qt_5_7 |
Qt_5_6 |
То же, что и Qt_5_6 |
QDataStream::Qt_5_8 |
Qt_5_7 |
То же, что и Qt_5_6 |
QDataStream::Qt_5_9 |
Qt_5_8 |
То же, что и Qt_5_6 |
QDataStream::Qt_5_10 |
Qt_5_9 |
То же, что и Qt_5_6 |
QDataStream::Qt_5_11 |
Qt_5_10 |
То же, что и Qt_5_6 |
QDataStream::Qt_5_12 |
18 |
Версия 18 (Qt 5.12) |
QDataStream::Qt_5_13 |
19 |
Версия 19 (Qt 5.13) |
QDataStream::Qt_5_14 |
Qt_5_13 |
То же, что и Qt_5_13 |
QDataStream::Qt_5_15 |
Qt_5_14 |
То же, что и Qt_5_13 |
QDataStream::Qt_6_0 |
20 |
Версия 20 (Qt 6.0) |
QDataStream::Qt_6_1 |
Qt_6_0 |
То же, что и Qt_6_0 |
См. также setVersion() и version().
Документация по функциям-членам
QDataStream::QDataStream(const QByteArray &a)
Создаёт поток данных только для чтения, который работает с массивом байтов a. Используйте QDataStream(QByteArray*, int), если хотите записывать в массив байтов.
Так как QByteArray не является подклассом QIODevice, внутри создаётся QBuffer для обертывания массива байтов.
QDataStream::QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode)
Создаёт поток данных, который работает с массивом байтов a. Параметр mode описывает способ использования устройства.
В качестве альтернативы можно использовать QDataStream(const QByteArray &), если нужно только читать из массива байтов.
Так как QByteArray не является подклассом QIODevice, внутри создаётся QBuffer для обертывания массива байтов.
QDataStream::QDataStream(QIODevice *d)
Создаёт поток данных, использующий устройство ввода-вывода d.
См. также setDevice() и device().
QDataStream::QDataStream()
Создаёт поток данных без устройства ввода-вывода.
См. также setDevice().
QDataStream::~QDataStream()
Уничтожает поток данных.
Деструктор не повлияет на текущее устройство ввода-вывода, за исключением случаев, когда это внутреннее устройство ввода-вывода (например, QBuffer), обрабатывающее QByteArray, переданное в конструктор, в этом случае внутреннее устройство ввода-вывода уничтожается.
[since 5.7] void QDataStream::abortTransaction()
Прерывает транзакцию чтения.
Эта функция обычно используется для отбрасывания транзакции после ошибок на более высоких уровнях протокола или потери синхронизации потока.
Если вызвана для внутренней транзакции, прерывание перенаправляется на внешнюю транзакцию, и все начатые внутренние транзакции будут вынужденно завершены.
Для внешней транзакции, отбрасывает точку восстановления и все внутренние дублированные данные потока. Не повлияет на текущую позицию чтения в потоке.
Устанавливает состояние потока данных в
| Константа | Описание |
|---|---|
ReadCorruptData |
. |
Эта функция была добавлена в Qt 5.7.
См. также startTransaction(), commitTransaction() и rollbackTransaction().
bool QDataStream::atEnd() const
Возвращает true если устройство ввода-вывода достигло конечной позиции (конец потока или файла) или если устройство ввода-вывода не задано; в противном случае возвращает false.
См. также QIODevice::atEnd().
QDataStream::ByteOrder QDataStream::byteOrder() const
Возвращает текущую установку порядка байтов — либо BigEndian, либо LittleEndian.
См. также setByteOrder().
[since 5.7] bool QDataStream::commitTransaction()
Завершает транзакцию чтения. Возвращает true если во время транзакции не произошло ошибок чтения; в противном случае возвращает false.
Если вызвана для внутренней транзакции, выполнение отложенно до вызова outermost commitTransaction(), rollbackTransaction() или abortTransaction().
В противном случае, если состояние потока указывает на чтение за пределами данных, эта функция восстанавливает данные потока до момента вызова startTransaction(). В этой ситуации вам нужно подождать новых данных, после чего начать новую транзакцию. Если поток данных прочитал повреждённые данные или какая-либо из вложенных транзакций была прервана, эта функция прерывает транзакцию.
Эта функция была добавлена в Qt 5.7.
См. также startTransaction(), rollbackTransaction() и abortTransaction().
QIODevice *QDataStream::device() const
Возвращает текущее установленное устройство ввода-вывода, или nullptr если устройство не установлено.
См. также setDevice().
QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const
Возвращает точность чисел с плавающей точкой в потоке данных.
См. также FloatingPointPrecision и setFloatingPointPrecision().
QDataStream &QDataStream::readBytes(char *&s, uint &l)
Считывает буфер s из потока и возвращает ссылку на поток.
Буфер s выделяется с помощью new []. Удалите его с помощью оператора delete [].
Параметр l устанавливается в длину буфера. Если считанная строка пуста, l устанавливается в 0, а s устанавливается в nullptr.
Формат сериализации — это спецификатор длины quint32 сначала, затем l байтов данных.
См. также readRawData() и writeBytes().
int QDataStream::readRawData(char *s, int len)
Считывает не более len байтов из потока в s и возвращает количество считанных байтов. Если произошла ошибка, функция возвращает -1.
Буфер s должен быть предварительно выделен. Данные не декодируются.
См. также readBytes(), QIODevice::read() и writeRawData().
void QDataStream::resetStatus()
Сбрасывает состояние потока данных.
См. также Status, status() и setStatus().
[since 5.7] void QDataStream::rollbackTransaction()
Отменяет транзакцию чтения.
Эта функция обычно используется для отмены транзакции, когда до завершения транзакции было обнаружено неполное чтение.
Если вызвана на внутренней транзакции, отмена делегируется внешней транзакции, и все последующие начатые внутренние транзакции будут завершены с ошибкой.
Для внешней транзакции восстанавливает данные потока до момента вызова startTransaction(). Если поток данных прочитал поврежденные данные или любая из внутренних транзакций была прервана, эта функция прерывает транзакцию.
Если предыдущие операции с потоком завершились успешно, устанавливает состояние потока данных в
| Постоянная | Описание |
|---|---|
ReadPastEnd |
. |
Эта функция была представлена в Qt 5.7.
См. также startTransaction(), commitTransaction() и abortTransaction().
void QDataStream::setByteOrder(QDataStream::ByteOrder bo)
Устанавливает порядок байтов сериализации в bo.
Параметр bo может быть QDataStream::BigEndian или QDataStream::LittleEndian.
Значение по умолчанию — big endian. Рекомендуется оставить это значение, если нет особых требований.
См. также byteOrder().
void QDataStream::setDevice(QIODevice *d)
void QDataStream::setDevice(QIODevice *d)
Устанавливает устройство ввода-вывода в d, которое может быть nullptr для сброса текущего устройства ввода-вывода.
См. также device().
void QDataStream::setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision)
Устанавливает точность чисел с плавающей точкой в потоке данных в precision. Если точность чисел с плавающей точкой — DoublePrecision, а версия потока данных — Qt_4_6 или выше, все числа с плавающей точкой будут записаны и считаны с точностью 64 бита. Если точность чисел с плавающей точкой — SinglePrecision, а версия — Qt_4_6 или выше, все числа с плавающей точкой будут записаны и считаны с точностью 32 бита.
Для версий до Qt_4_6 точность чисел с плавающей точкой в потоке данных зависит от вызываемого оператора потока.
Значение по умолчанию — DoublePrecision.
Обратите внимание, что это свойство не влияет на сериализацию или десериализацию экземпляров qfloat16.
Предупреждение: Это свойство должно иметь одинаковое значение у объекта, записывающего, и у объекта, считывающего поток данных.
См. также floatingPointPrecision().
void QDataStream::setStatus(QDataStream::Status status)
Устанавливает состояние потока данных в заданное значение status.
Последующие вызовы setStatus() игнорируются до тех пор, пока не будет вызван resetStatus().
См. также Status, status() и resetStatus().
void QDataStream::setVersion(int v)
Устанавливает номер версии формата сериализации данных в v, значение перечисления Version.
Вам не обязательно устанавливать версию, если вы используете текущую версию Qt, но для собственных пользовательских двоичных форматов рекомендуется это делать; см. Versioning в подробном описании.
Для добавления новых функций формат сериализации потока данных некоторых классов Qt изменился в некоторых версиях Qt. Если вы хотите прочитать данные, созданные более ранней версией Qt, или записать данные, которые может прочитать программа, скомпилированная с более ранней версией Qt, используйте эту функцию для изменения формата сериализации, используемого QDataStream.
Перечисление Version предоставляет символические константы для различных версий Qt. Например:
QDataStream out(file); out.setVersion(QDataStream::Qt_4_0);
См. также version() и Version.
int QDataStream::skipRawData(int len)
Пропускает len байтов из устройства. Возвращает количество фактически пропущенных байтов или -1 при ошибке.
Это эквивалентно вызову readRawData() с буфером длиной len и игнорированию буфера.
См. также QIODevice::seek().
[since 5.7] void QDataStream::startTransaction()
Начинает новую транзакцию чтения в потоке.
Определяет точку восстановления в последовательности операций чтения. Для последовательных устройств данные чтения будут дублироваться внутри, чтобы обеспечить восстановление в случае неполного чтения. Для устройств произвольного доступа эта функция сохраняет текущую позицию потока. Вызовите commitTransaction(), rollbackTransaction() или abortTransaction() для завершения текущей транзакции.
После начала транзакции последующие вызовы этой функции сделают транзакцию рекурсивной. Внутренние транзакции действуют как агенты внешней транзакции (т. е. сообщают о состоянии операций чтения внешней транзакции, которая может восстановить позицию потока).
Примечание: Восстановление до момента вызова вложенной функции startTransaction() не поддерживается.
При возникновении ошибки во время транзакции (включая ошибку внутренней транзакции), чтение из потока данных приостанавливается (все последующие операции чтения возвращают пустые/нулевые значения), и последующие внутренние транзакции завершаются с ошибкой. Начав новую внешнюю транзакцию, можно восстановиться из этого состояния. Это поведение делает ненужным отдельную проверку ошибок для каждой операции чтения.
Эта функция была представлена в Qt 5.7.
См. также commitTransaction(), rollbackTransaction() и abortTransaction().
QDataStream::Status QDataStream::status() const
Возвращает состояние потока данных.
См. также Status, setStatus() и resetStatus().
int QDataStream::version() const
Возвращает номер версии формата сериализации данных.
См. также setVersion() и Version.
QDataStream &QDataStream::writeBytes(const char *s, uint len)
Записывает спецификатор длины len и буфер s в поток и возвращает ссылку на поток.
len сериализуется как quint32, за которым следуют len байтов из s. Обратите внимание, что данные не кодируются.
См. также writeRawData() и readBytes().
int QDataStream::writeRawData(const char *s, int len)
Записывает len байтов из s в поток. Возвращает количество фактически записанных байтов или -1 при ошибке. Данные не кодируются.
См. также writeBytes(), QIODevice::write(), и readRawData().
QDataStream &QDataStream::operator<<(qint8 i)
Записывает знаковое байтовое значение, i, в поток и возвращает ссылку на поток.
QDataStream &QDataStream::operator<<(quint8 i)
Это перегруженный метод.
Записывает беззнаковое байтовое значение, i, в поток и возвращает ссылку на поток.
QDataStream &QDataStream::operator<<(qint16 i)
Это перегруженный метод.
Записывает знаковое 16-битное целое число, i, в поток и возвращает ссылку на поток.
QDataStream &QDataStream::operator<<(quint16 i)
Это перегруженный метод.
Записывает беззнаковое 16-битное целое число, i, в поток и возвращает ссылку на поток.
QDataStream &QDataStream::operator<<(qint32 i)
Это перегруженный метод.
Записывает знаковое 32-битное целое число, i, в поток и возвращает ссылку на поток.
QDataStream &QDataStream::operator<<(quint32 i)
Это перегруженный метод.
Записывает беззнаковое целое число, i, в поток как 32-битное беззнаковое целое число (quint32). Возвращает ссылку на поток.
QDataStream &QDataStream::operator<<(qint64 i)
Это перегруженный метод.
Записывает знаковое 64-битное целое число, i, в поток и возвращает ссылку на поток.
QDataStream &QDataStream::operator<<(quint64 i)
Это перегруженный метод.
Записывает беззнаковое 64-битное целое число, i, в поток и возвращает ссылку на поток.
[since 5.9] QDataStream &QDataStream::operator<<(std::nullptr_t ptr)
Это перегруженный метод.
Эмулирует запись std::nullptr_t, ptr, в поток и возвращает ссылку на поток. Эта функция не записывает ничего в поток, так как значения std::nullptr_t хранятся как 0 байтов.
Эта функция была добавлена в Qt 5.9.
QDataStream &QDataStream::operator<<(bool i)
Записывает булево значение, i, в поток. Возвращает ссылку на поток.
[since 5.9] QDataStream &QDataStream::operator<<(qfloat16 f)
Это перегруженный метод.
Записывает число с плавающей точкой, f, в поток в стандартном формате IEEE 754. Возвращает ссылку на поток.
Эта функция была добавлена в Qt 5.9.
QDataStream &QDataStream::operator<<(float f)
Это перегруженный метод.
Записывает число с плавающей точкой, f, в поток в стандартном формате IEEE 754. Возвращает ссылку на поток.
См. также setFloatingPointPrecision().
QDataStream &QDataStream::operator<<(double f)
Это перегруженный метод.
Записывает число с плавающей точкой, f, в поток в стандартном формате IEEE 754. Возвращает ссылку на поток.
См. также setFloatingPointPrecision().
QDataStream &QDataStream::operator<<(const char *s)
Это перегруженный метод.
Записывает строку s с завершающим нулём в поток и возвращает ссылку на поток.
Строка сериализуется с использованием writeBytes().
См. также writeBytes() и writeRawData().
[since 6.0] QDataStream &QDataStream::operator<<(char16_t c)
Это перегруженный метод.
Записывает символ, c, в поток. Возвращает ссылку на поток.
Эта функция была добавлена в Qt 6.0.
[since 6.0] QDataStream &QDataStream::operator<<(char32_t c)
Это перегруженный метод.
Записывает символ, c, в поток. Возвращает ссылку на поток.
Эта функция была добавлена в Qt 6.0.
QDataStream &QDataStream::operator>>(qint8 &i)
Считывает знаковое байтовое значение из потока в i и возвращает ссылку на поток.
QDataStream &QDataStream::operator>>(quint8 &i)
Это перегруженный метод.
Считывает беззнаковое байтовое значение из потока в i и возвращает ссылку на поток.
QDataStream &QDataStream::operator>>(qint16 &i)
Это перегруженный метод.
Считывает знаковое 16-битное целое число из потока в i и возвращает ссылку на поток.
QDataStream &QDataStream::operator>>(quint16 &i)
Это перегруженный метод.
Считывает беззнаковое 16-битное целое число из потока в i и возвращает ссылку на поток.
QDataStream &QDataStream::operator>>(qint32 &i)
Это перегруженный метод.
Считывает знаковое 32-битное целое число из потока в i и возвращает ссылку на поток.
QDataStream &QDataStream::operator>>(quint32 &i)
Это перегруженный метод.
Считывает беззнаковое 32-битное целое число из потока в i и возвращает ссылку на поток.
QDataStream &QDataStream::operator>>(qint64 &i)
Это перегруженный метод.
Считывает знаковое 64-битное целое число из потока в i и возвращает ссылку на поток.
QDataStream &QDataStream::operator>>(quint64 &i)
Это перегруженный метод.
Считывает беззнаковое 64-битное целое число из потока в i и возвращает ссылку на поток.
[since 5.9] QDataStream &QDataStream::operator>>(std::nullptr_t &ptr)
Это перегруженный метод.
Эмулирует чтение std::nullptr_t из потока в ptr и возвращает ссылку на поток. Эта функция не считывает ничего из потока, так как значения std::nullptr_t хранятся как 0 байтов.
Эта функция была добавлена в Qt 5.9.
QDataStream &QDataStream::operator>>(bool &i)
Считывает булево значение из потока в i. Возвращает ссылку на поток.
[since 5.9] QDataStream &QDataStream::operator>>(qfloat16 &f)
Это перегруженный метод.
Считывает число с плавающей точкой из потока в f, используя стандартный формат IEEE 754. Возвращает ссылку на поток.
Эта функция была добавлена в Qt 5.9.
QDataStream &QDataStream::operator>>(float &f)
Это перегруженный метод.
Считывает число с плавающей точкой из потока в f, используя стандартный формат IEEE 754. Возвращает ссылку на поток.
См. также setFloatingPointPrecision().
QDataStream &QDataStream::operator>>(double &f)
Это перегруженный метод.
Считывает число с плавающей точкой из потока в f, используя стандартный формат IEEE 754. Возвращает ссылку на поток.
См. также setFloatingPointPrecision().
QDataStream &QDataStream::operator>>(char *&s)
Это перегруженный метод.
Считывает строку s с завершением '\0' из потока и возвращает ссылку на поток.
Строка десериализуется с помощью readBytes().
Память для строки выделяется с помощью new [] — вызывающий код должен освободить её с помощью delete [].
См. также readBytes() и readRawData().
[since 6.0] QDataStream &QDataStream::operator>>(char16_t &c)
Это перегруженный метод.
Считывает 16-битный символ из потока в c и возвращает ссылку на поток.
Этот метод был добавлен в Qt 6.0.
[since 6.0] QDataStream &QDataStream::operator>>(char32_t &c)
Это перегруженный метод.
Считывает 32-битный символ из потока в c и возвращает ссылку на поток.
Этот метод был добавлен в Qt 6.0.
Связанные нечленные функции
[since 6.0] template <typename T1, typename T2> QDataStreamIfHasOStreamOperators<T1, T2> operator<<(QDataStream &out, const std::pair<T1, T2> &pair)
Записывает пару pair в поток out.
Этот метод требует, чтобы типы T1 и T2 реализовывали operator<<().
Этот метод был добавлен в Qt 6.0.
См. также Сериализация типов данных Qt.
[since 6.0] template <typename T1, typename T2> QDataStreamIfHasIStreamOperators<T1, T2> operator>>(QDataStream &in, std::pair<T1, T2> &pair)
Считывает пару из потока in в pair.
Этот метод требует, чтобы типы T1 и T2 реализовывали operator>>().
Этот метод был добавлен в Qt 6.0.
См. также Сериализация типов данных Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qdatastream.html