" title="Написать письмо">Написать письмо
Много статей не имеет срока устаревания. Есть смысл смотреть и 2011, и даже 2008 год.
Политика сайта: написать статью, а потом обновлять ее много лет.
Открыта карта ВТБ для материальной поддержки сайта: 4893470220568296.

Рекламодателям! Перестаньте спамить мне на почту с предложениями о размещении рекламы на этом сайте. Я никогда спамером/рекламщиком не был и не буду!
Ваш IP: 34.228.41.66
Вы подарите мне деньги на развитие этого сайта? Номер карты указан зеленым цветом.
 

Статистика

Пользователи : 1
Статьи : 1092
Просмотры материалов : 3818557
 
Потоковое чтение данных в Qt (30.11.2018). Печать E-mail
2018 - Ноябрь
30.11.2018 19:14
Save & Share
Комментарии из рабочего файла: какие нюансы возникают при использовании объекта класса QDataStream.

Особенности потокового экспорта (что как записывается при каждой операции "<<"):
- текст в кавычках (записывается как char*) создает 4 байта информации "сколько байт записано в поток + 1", количество байт записанной информации, один завершающий байт (терминатор?) "00".
    Текст "31" будет записан как префикс "00-00-00-03" (3 байта с завершающим), "33" как символ "3", "31" как символ "1", завершающий байт "00".
- целочисленное число (записывается как 4-байтовый int) создает 4 байта информации. Попытка записать число больше приводит к его записи как нескольких интов.
    Число 258 будет записано как 4 байта "00-00-01-02". Число "4.343.434.343" будет записано как 8 байт (2 инта) "00-00-00-01 02-E3-8C-67".
    Отрицательные числа также успешно записываются в рамках 4 байт, вплоть до -2147483647.
    На практике беззнаковый целочисленный максимум упирается в 18446744073709551615 (8 байт по FF);
- QString создает 4 байта информации "сколько байт записано в поток", двойное количество байт записанной информации (на 1 символ отводится 2 байта).
    Текстовая строка "5.1.2.1" будет записана как "00-00-00-0E" (2*7 символов), "00-35-00-2E-00-31-00-2E-00-32-00-2E-00-31" (каждый из 7 символов будет "00-xx").
    На практике удалось экспортировать строку 600млн знаков, больше не смог: закончилась RAM (OpenSuse v.12.1). В Windows XP x32 при большем количестве RAM - удалось экспортировать всего 300млн знаков;
- QStringList записывается по неизвестному алгоритму;
- QByteArray записывается как char*;
- остальные типы данных - стандартны. float и double записываются как 8 байт, short int - 2 байта, bool - 1 байт (значения 1 или 0).

Общее:
- поток не способен работать с переменными типа long int, long double - накладывает ограничения на экспорт;
- изменение типа хотя бы одной переменной при работе с потоком может привести к ошибке импорта. То есть, жесткая привязка к типу данных;
- структура файла хороша для программного чтения, но не для ручного. При наличии большого количества параметров QString/Char* приходится считать байты на распечатке;
- при работе с хешем, записью в файл и потоком - перед инициализацией хеша нужно закрыть и открыть файл заново!!!
Обновлено ( 30.11.2018 19:18 )
 
 

Последние новости

©2008-2018. All Rights Reserved. Разработчик - " title="Сергей Белов">Сергей Белов. Материалы сайта предоставляются по принципу "как есть". Автор не несет никакой ответственности и не гарантирует отсутствие неправильных сведений и ошибок. Вся ответственность за использование материалов лежит полностью на читателях. Размещение материалов данного сайта на иных сайтах запрещено без указания активной ссылки на данный сайт-первоисточник (ГК РФ: ст.1259 п.1 + ст.1274 п.1-3).