Qtのシリアライズ

シリアライズの目的は、オブジェクトの状態を保存して、必要なときに再作成できるようにすることです。これにより、次のようなアクションを実行できます:

  • Web サービスを使用してリモートアプリケーションにオブジェクトを送信する。
  • オブジェクトをJSONまたはXML文字列として渡す。
  • ユーザー情報の保存と復元、アプリケーション間での共有

Qt API は、いくつかのユースケースに対してシリアライズのサポートを提供しています:

  • Qt のJSONサポートは、JSON データを解析、変更、保存するための使いやすい C++ API を提供します。QtのCBORサポートは、JSONのスーパーセットであるバイナリデータエンコーディングのコンパクトな形式です。
  • QDataStream バイナリデータのシリアライズを提供します。QIODevice
  • Qt XML C++ Classes XMLのためのXML StreamingとDOM標準のC++実装を提供します。
  • CBORは、CBOR シリアル化フォーマットの Qt 実装です。
  • QSettings プラットフォームに依存しないアプリケーション設定をシリアライズして保存する方法を提供します。

JSONとCBORの利点

JSONを使用する場合、情報はQJsonObject に保存され、QJsonDocumentQByteArray に値をストリームするように注意します。

例えば

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 つのクラスQXmlStreamReaderQXmlStreamWriter を提供します。

DOM XML クラス

QDomDocument クラスは XML ドキュメント全体を表します。これはドキュメント・ツリーのルートであり、ドキュメントのデータへの主要なアクセスを提供します。

ストリーム・ベースのXMLクラス

ストリーム・リーダーは、XML文書をトークンのストリームとして報告する。これはSAXとは異なり、SAXアプリケーションはパーサーからXMLイベントを受け取るハンドラーを提供するのに対し、QXmlStreamReader 。このプル・アプローチにより、再帰的降下パーサーを構築することが可能になり、XML解析コードを異なるメソッドやクラスに分割することができる。

QXmlStreamReader ストリーム・パーサーは、整形式XML 1.0用のパーサーである。したがって、ストリーム・リーダーに提供されるデータは、W3Cの整形式XMLの基準に従わなければならない。 、 、 などの関数を使用して、このようなエラーをテストし、その説明を得ることができる。atEnd() error() hasError()

QXmlStreamWriter はストリーミングAPIで、要素や属性を記述する際にnamespaceUriが指定されると、名前空間の接頭辞を処理します。

シリアライズを提供するクラス

<QtCborCommon>

ストリーミングクラス(QCborStreamReader、QCborStreamWriter)とQCborValueに共通する定義を含む。

QCborArray

CBOR要素の配列を保持するために使用されます。

QCborMap

CBORで表現可能な連想コンテナを保持するために使用される

QCborStreamReader

QByteArrayまたはQIODeviceで動作する単純なCBORストリームデコーダ。

QCborStreamWriter

一方向ストリームで動作する単純なCBORエンコーダ

QCborValue

CBORで値をカプセル化

QDataStream

QIODeviceへのバイナリデータのシリアライズ

QJsonArray

JSON配列をカプセル化

QJsonDocument

JSONドキュメントを読み書きする方法

QJsonObject

JSONオブジェクトのカプセル化

QJsonParseError

JSON解析中のエラー報告に使用される

QJsonValue

JSON内の値をカプセル化する

QTextStream

テキストの読み書きに便利なインターフェース

QXmlStreamReader

シンプルなストリーミングAPIで整形式XMLを読み込む高速パーサー

QXmlStreamWriter

シンプルなストリーミング API を備えた XML ライター

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。