У меня есть Qt TCP Server и клиентская программа, которые могут взаимодействовать друг с другом. Сервер может отправлять некоторые сгенерированные функции в сокет, используя Qtextstream. И Клиент считывает данные из сокета с помощью простого readAll() и отображает его в QtextEdit.
Теперь мои данные со стороны сервера огромны (вокруг 7000+ выборок), и мне нужно, чтобы данные отображались на стороне клиента мгновенно. Я узнал, что использование XML поможет в моем случае. Итак, я создал Qt XML-сервер, и он генерирует все XML-данные в XML файл. Я читаю XML файл на стороне клиента, и я могу показать его содержимое. Я использовал метод DOM для синтаксического анализа. Но я получаю данные для отображения только тогда, когда все 7000+ образцы были сгенерированы на стороне сервера.
Мне нужны разъяснения по этим вопросам:
PS: Я новичок, простите мое невежество. Спасибо.
Большинство парсеров DOM XML требуют полного, хорошо сформированного XML-документа, прежде чем они что-либо сделают с ним. Это то, что вы видите: ваши данные обрабатываются только после того, как все образцы получены.
Вам нужно использовать инкрементный синтаксический анализатор, который не заботится о том, что документ XML еще не завершен.
С другой стороны: если вам не требуется XML для взаимодействия с сторонними системами, вы, вероятно, тратите много ресурсов, используя его. Я не знаю, где вы "научились", что XML "поможет в вашем случае". Мне это не учится, это просто после толпы, не понимая, что происходит. Является ли ваше требование использовать XML или перемещать данные? Перемещение данных вокруг было хорошо понятой проблемой на протяжении десятилетий. Компьютеры "говорят" двоично. Знаешь, не нужно обойти это. Если вам нужно только перемещаться по некоторым номерам, используйте QDataStream
и QDataStream
это с ним. Это будет на два порядка быстрее, чем самые быстрые синтаксические анализаторы XML, вы будете передавать на порядок меньше данных, и все будут жить счастливо с тех пор *.
* Живя счастливо, когда это не гарантировано, индивидуальные результаты могут отличаться.
QDataStream
. Единственная рекомендация - исправить версию используемого вами протокола QDataStream - установить для него одинаковое значение как на принимающей, так и на отправляющей сторонах. Таким образом, вы можете, в конце концов, документировать, как выглядят отправляемые вами двоичные данные - это гарантированно останется таким, несмотря на то, что вы обновляете версии Qt.