Qtのシリアライズ
シリアライズの目的は、オブジェクトの状態を保存して、必要なときに再作成できるようにすることです。これにより、以下のようなアクションを実行できます:
- Web サービスを使用してリモートアプリケーションにオブジェクトを送信する。
- オブジェクトをJSONまたはXML文字列として渡す。
- ユーザー情報の保存と復元、アプリケーション間での共有
Qt API は、いくつかのユースケースに対してシリアライズのサポートを提供しています:
- Qt のJSONサポートは、JSON データを解析、変更、保存するための使いやすい C++ API を提供します。QtのCBORサポートは、JSONのスーパーセットであるバイナリデータエンコーディングのコンパクトな形式です。
- QDataStream バイナリデータのシリアライズをQIODevice
- Qt XML C++ ClassesXMLのためのXML StreamingとDOM標準のC++実装を提供します。
- CBORは、CBOR シリアル化フォーマットの Qt 実装です。
- QSettings プラットフォームに依存しないアプリケーション設定をシリアライズして保存する方法を提供します。
JSONとCBORの利点
JSONを使用する場合、情報はQJsonObject に保存され、QJsonDocument はQByteArray に値をストリームするように注意します。
例えば
QJsonObject jobject; jobject["SensorID"] = m_id; jobject["AmbientTemperature"] = m_ambientTemperature; jobject["ObjectTemperature"] = m_objectTemperature; jobject["AccelerometerX"] = m_accelerometerX; jobject["AccelerometerY"] = m_accelerometerY; jobject["AccelerometerZ"] = m_accelerometerZ; jobject["Altitude"] = m_altitude; jobject["Light"] = m_light; jobject["Humidity"] = m_humidity; QJsonDocument doc( jobject ); return doc.toJson();
JSONにはいくつかの利点があります:
- テキスト形式のJSONは宣言的であり、人間にとって読みやすい。
- 情報が構造化されている。
- 一般的な情報の交換が簡単
- JSONは、追加値でメッセージを拡張できる。
- クラウドベースのソリューションでJSONを受信し、解析するための多くのソリューションが存在する。
CBORはConcise Binary Object Representationの略で、JSONのスーパーセットである非常にコンパクトなバイナリ・データ・エンコード形式である。これはIETF Constrained RESTful Environments (CoRE) WGによって作成され、多くの新しいRFCで使用されている。CBORはJSONの利点の多くを共有しているが、コンパクトさのために人間の読みやすさを犠牲にしている。
QDataStreamクラスの利点
QDataStream QDataStreamクラスは、データの流れ全体が決まっていて、それを変更する予定がない場合に有効なオプションである。また、データの読み手と書き手の両方がQtで記述されている必要があります。
このサポートをクラスに追加するには、2つの演算子を追加する必要があります。例えば、SensorInformationというクラスの場合です:
QDataStream &operator<<(QDataStream &, const SensorInformation &); QDataStream &operator>>(QDataStream &, SensorInformation &);
シリアライズの実装を以下に示します:
QDataStream &operator<<(QDataStream &out, const SensorInformation &item) { QDataStream::FloatingPointPrecision prev = out.floatingPointPrecision(); out.setFloatingPointPrecision(QDataStream::DoublePrecision); out << item.m_id << item.m_ambientTemperature << item.m_objectTemperature << item.m_accelerometerX << item.m_accelerometerY << item.m_accelerometerZ << item.m_altitude << item.m_light << item.m_humidity; out.setFloatingPointPrecision(prev); return out; }
デシリアライズも同様に動作しますが、>>
演算子を使用します。例えば、out >> item.m_id
などです。
通常、QDataStream を使用する方が、テキスト形式の JSON を使用するよりも高速です。
Qt XML C++ クラスの利点
Qt は、XML コンテンツを読み書きするための DOM クラスとストリームベースのクラスの両方を提供しています。
Qt は、XML ドキュメントを表すQDomDocument クラスと、シンプルなストリーミング API を通じて XML を読み書きするための 2 つのクラスQXmlStreamReader とQXmlStreamWriter を提供します。
DOM XML クラス
QDomDocument クラスは XML ドキュメント全体を表します。これはドキュメント・ツリーのルートであり、ドキュメントのデータへの主要なアクセスを提供します。
ストリーム・ベースのXMLクラス
ストリーム・リーダーは、XML文書をトークンのストリームとして報告する。これはSAXとは異なり、SAXアプリケーションはパーサーからXMLイベントを受け取るハンドラーを提供するのに対し、QXmlStreamReader 。このプル・アプローチにより、再帰的降下パーサーを構築することが可能になり、XML解析コードを異なるメソッドやクラスに分割することができる。
QXmlStreamReader ストリーム・パーサーは、外部パース済みエンティティを除いた、整形式XML 1.0用のパーサーである。したがって、ストリーム・リーダーに提供されるデータは、W3Cの整形式XMLの基準に従わなければならない。 、 、 などの関数を使用して、このようなエラーをテストし、その説明を得ることができる。atEnd()
error()
hasError()
QXmlStreamWriter はストリーミングAPIで、要素や属性を記述する際にnamespaceUriが指定されると、名前空間の接頭辞を処理します。
シリアライズを提供するクラス
ストリーミングクラス(QCborStreamReader、QCborStreamWriter)とQCborValueに共通する定義を含む。 | |
CBOR要素の配列を保持するために使用されます。 | |
CBORで表現可能な連想コンテナを保持するために使用される | |
QByteArrayまたはQIODeviceで動作する単純なCBORストリームデコーダ。 | |
一方向ストリームで動作する単純なCBORエンコーダ | |
CBORで値をカプセル化 | |
QIODeviceへのバイナリデータのシリアライズ | |
JSON配列をカプセル化 | |
JSONドキュメントを読み書きする方法 | |
JSONオブジェクトのカプセル化 | |
JSON解析中のエラー報告に使用される | |
JSON内の値をカプセル化する | |
テキストの読み書きに便利なインターフェース | |
整形式のXML 1.0ドキュメントをシンプルなストリーミングAPIで読み込むための高速パーサー | |
シンプルなストリーミングAPIを備えたXML 1.0ライター |
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.