QDataStream Class
QDataStreamクラスは、バイナリ・データをQIODevice 。
Header: | #include <QDataStream> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | QIODeviceBase |
- 継承メンバを含む全メンバ一覧
- QDataStreamは、Input/OutputおよびNetworkingに属しています。
注意:このクラスの関数はすべてリエントラントです。
パブリック・タイプ
enum | ByteOrder { BigEndian, LittleEndian } |
enum | FloatingPointPrecision { SinglePrecision, DoublePrecision } |
enum | Status { Ok, ReadPastEnd, ReadCorruptData, WriteFailed, SizeLimitExceeded } |
enum | Version { Qt_1_0, Qt_2_0, Qt_2_1, Qt_3_0, Qt_3_1, …, Qt_6_8 } |
パブリック関数
QDataStream() | |
QDataStream(QIODevice *d) | |
QDataStream(const QByteArray &a) | |
QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode) | |
~QDataStream() | |
void | abortTransaction() |
bool | atEnd() const |
QDataStream::ByteOrder | byteOrder() const |
bool | commitTransaction() |
QIODevice * | device() const |
QDataStream::FloatingPointPrecision | floatingPointPrecision() const |
(since 6.7) QDataStream & | readBytes(char *&s, qint64 &l) |
qint64 | readRawData(char *s, qint64 len) |
void | resetStatus() |
void | rollbackTransaction() |
void | setByteOrder(QDataStream::ByteOrder bo) |
void | setDevice(QIODevice *d) |
void | setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision) |
void | setStatus(QDataStream::Status status) |
void | setVersion(int v) |
qint64 | skipRawData(qint64 len) |
void | startTransaction() |
QDataStream::Status | status() const |
int | version() const |
QDataStream & | writeBytes(const char *s, qint64 len) |
qint64 | writeRawData(const char *s, qint64 len) |
QDataStream & | operator<<(qint8 i) |
QDataStream & | operator<<(bool i) |
(since 6.0) QDataStream & | operator<<(char16_t c) |
(since 6.0) QDataStream & | operator<<(char32_t c) |
QDataStream & | operator<<(const char *s) |
QDataStream & | operator<<(double f) |
QDataStream & | operator<<(float f) |
QDataStream & | operator<<(qint16 i) |
QDataStream & | operator<<(qint32 i) |
QDataStream & | operator<<(qint64 i) |
QDataStream & | operator<<(quint16 i) |
QDataStream & | operator<<(quint32 i) |
QDataStream & | operator<<(quint64 i) |
QDataStream & | operator<<(quint8 i) |
QDataStream & | operator<<(std::nullptr_t ptr) |
QDataStream & | operator>>(bool &i) |
QDataStream & | operator>>(qint8 &i) |
QDataStream & | operator>>(char *&s) |
(since 6.0) QDataStream & | operator>>(char16_t &c) |
(since 6.0) QDataStream & | operator>>(char32_t &c) |
QDataStream & | operator>>(double &f) |
QDataStream & | operator>>(float &f) |
QDataStream & | operator>>(qint16 &i) |
QDataStream & | operator>>(qint32 &i) |
QDataStream & | operator>>(qint64 &i) |
QDataStream & | operator>>(quint16 &i) |
QDataStream & | operator>>(quint32 &i) |
QDataStream & | operator>>(quint64 &i) |
QDataStream & | operator>>(quint8 &i) |
QDataStream & | operator>>(std::nullptr_t &ptr) |
非会員
(since 6.0) QDataStream & | operator<<(QDataStream &out, const std::pair<T1, T2> &pair) |
(since 6.0) QDataStream & | operator>>(QDataStream &in, std::pair<T1, T2> &pair) |
詳細説明
データ・ストリームは、ホスト・コンピュータのオペレーティング・システムやCPU、バイト順序に100%依存しない、符号化された情報のバイナリ・ストリームである。例えば、Windows上のPCで書き込まれたデータ・ストリームは、Solarisを実行しているSun SPARCで読み取ることができます。
また、データストリームを使って、raw unencoded binary data を読み書きすることもできる。パースする」入力ストリームが必要な場合は、QTextStream を参照のこと。
QDataStreamクラスは、char
、short
、int
、char *
などのC++の基本データ型のシリアライズを実装しています。より複雑なデータのシリアライゼーションは、データをプリミティブなユニットに分割することで実現します。
データ・ストリームは、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 を使ってシリアライズすることができます。列挙型クラスは、宣言されたサイズを使用してシリアライズされます。
初期I/Oデバイスは通常コンストラクタで設定されますが、setDevice ()で変更できます。データの終端に達した場合(またはI/Oデバイスが設定されていない場合)atEnd ()はtrueを返します。
コンテナと文字列のシリアライズ
シリアライズの形式は、まず長さ指定子を指定し、次にl バイトのデータを指定します。長さ指定子は、バージョンが6.7未満の場合、または要素数が0xfffffffe(2^32 -2)未満の場合、1つのquint32になります。それ以外の場合は、拡張値0xfffffffeの後に実際の値を1つのquint64が続く。さらに、isNull()をサポートするコンテナでは、すべてのビットがセットされ、データがない1つのquint32としてエンコードされます。
一例を挙げると、文字列サイズが32ビットに収まる場合、char *
の文字列は、'˶0'バイトを含む文字列の長さに等しい32ビットの整数として書かれ、その後に'˶0'バイトを含む文字列のすべての文字が続きます。文字列サイズがより大きい場合、拡張サイズのマーカーとして値0xffffffffeが書き込まれ、その後に実際のサイズの64ビットが続く。char *
の文字列を読み込む場合、まず4バイトが読み込まれる。その値が0xffffffe(拡張サイズのマーカ)と等しくなければ、この4バイトは文字列の32ビットサイズとして扱われる。そうでない場合は、次の8バイトが読み込まれ、文字列の64ビットサイズとして扱われる。その後、ターミネーターの'˶0'を含む、char *
の文字列のすべての文字が読み込まれる。
バージョン管理
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;
データをシリアライズするときに使用するバイト順を選択できます。デフォルトの設定はビッグエンディアン(MSBファースト)です。リトルエンディアンに変更すると移植性が損なわれます(リーダーもリトルエンディアンに変更しない限り)。特別な要求がない限り、この設定のままにしておくことをお勧めします。
生のバイナリ・データの読み書き
データストリームに直接、未加工のバイナリデータを読み書きしたい場合もあるでしょう。readRawData() を使って、ストリームから事前に割り当てられたchar *
にデータを読み込むことができる。同様に、writeRawData() を使ってストリームにデータを書き込むこともできる。データのエンコード/デコードはすべて自分で行わなければならないことに注意してください。
同様の関数として、readBytes ()とwriteBytes ()がある。これらの関数は、生の関数とは以下のように異なる:readBytes char *
(writeBytes() は、データの長さを含むquint32を書き込み、その後にデータを書き込みます。データのエンコード/デコードは(長さのquint32を除いて)すべて自分で行わなければならないことに注意してください。
Qtコレクションクラスの読み書き
Qt コンテナ・クラスも QDataStream にシリアライズできます。これにはQList,QSet,QHash,QMap が含まれます。ストリーム演算子は、クラスの非メンバとして宣言されています。
他の Qt クラスの読み書き
ここで説明するオーバーロードされたストリーム演算子に加えて、QDataStream にシリアライズしたい Qt クラスには、そのクラスの非メンバーとして適切なストリーム演算子が宣言されています:
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
完全なパケットを受信しなかった場合、このコードはストリームを初期位置に戻し、その後、さらにデータが到着するのを待つ必要がある。
破損とセキュリティ
QDataStreamは破損したデータ入力に対して回復力がないため、トランザクションを使用する場合でも、セキュリティが重要な状況では使用しないでください。トランザクションは、非同期デバイスで現在利用可能なデータで有効な入力をデコードできるかどうかを判断するのに役立ちますが、利用可能なデータが正しく形成されていることを前提とします。
さらに、多くのQDataStreamデマーシャリング演算子は、ストリームで見つかった情報に基づいてメモリを割り当てます。これらのオペレータは、要求されたメモリ量が妥当かどうか、またはストリームで利用可能なデータ量と互換性があるかどうかの検証を行いません(例:QByteArray またはQString のデマーシャリングでは、数ギガバイトのデータの割り当て要求が表示されることがあります)。
QDataStreamは、出所が信頼できないコンテンツに使用すべきではありません。アプリケーションは、少なくともアプリケーション自身またはそのプラグインの出所と同程度には信頼できる出所のストリームのみをデコードしようとするように設計されるべきである。
QTextStream およびQVariantも参照 。
メンバ型ドキュメント
enum QDataStream::ByteOrder
データの読み書きで使用されるバイト順序。
定数 | 値 | 説明 |
---|---|---|
QDataStream::BigEndian | QSysInfo::BigEndian | 最上位バイトが最初(デフォルト) |
QDataStream::LittleEndian | QSysInfo::LittleEndian | 最下位バイトが最初 |
enum QDataStream::FloatingPointPrecision
データの読み書きに使用される浮動小数点数の精度。これは、データ・ストリームのバージョンがQt_4_6 以上の場合にのみ影響する。
警告 浮動小数点精度は、データ・ストリームを書き込むオブジェクトと読み込むオブジェクトで同じ値に設定する必要があります。
定数 | 値 | 説明 |
---|---|---|
QDataStream::SinglePrecision | 0 | データ・ストリーム内の浮動小数点数はすべて32ビット精度です。 |
QDataStream::DoublePrecision | 1 | データ・ストリームの浮動小数点数はすべて64ビット精度を持つ。 |
setFloatingPointPrecision() およびfloatingPointPrecision()も参照 。
enum QDataStream::Status
この列挙型は、データストリームの現在の状態を記述する。
定数 | 値 | 説明 |
---|---|---|
QDataStream::Ok | 0 | データストリームは正常に動作している。 |
QDataStream::ReadPastEnd | 1 | データ・ストリームは、基礎となるデバイスのデータの終端を越えて読み込まれた。 |
QDataStream::ReadCorruptData | 2 | データ・ストリームが破損したデータを読み込んだ。 |
QDataStream::WriteFailed | 3 | データ・ストリームが下位デバイスに書き込めない。 |
QDataStream::SizeLimitExceeded (since Qt 6.7) | 4 | データ・ストリームのサイズが現在のプラットフォームでサポートされているサイズより大きいため、データの読み書きができない。これは、例えば32ビット・プラットフォームで2GiB以上のデータを読み込もうとした場合に発生する可能性がある。 |
enum 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 と同じ |
QDataStream::Qt_6_2 | Qt_6_0 | Qt_6_0 と同じ |
QDataStream::Qt_6_3 | Qt_6_0 | Qt_6_0 と同じ |
QDataStream::Qt_6_4 | Qt_6_0 | Qt_6_0 と同じ |
QDataStream::Qt_6_5 | Qt_6_0 | Qt_6_0 と同じ |
QDataStream::Qt_6_6 | 21 | バージョン 21 (Qt 6.6) |
QDataStream::Qt_6_7 | 22 | バージョン 22 (Qt 6.7) |
QDataStream::Qt_6_8 | Qt_6_7 | Qt_6_7 と同じ |
setVersion() およびversion()も参照してください 。
メンバ関数 ドキュメント
QDataStream::QDataStream()
I/O デバイスを持たないデータストリームを構築します。
setDevice() も参照 。
[explicit]
QDataStream::QDataStream(QIODevice *d)
I/O デバイスd を使用するデータストリームを構築します。
QDataStream::QDataStream(const QByteArray &a)
バイト配列a を操作する読み取り専用データ・ストリームを構築します。バイト配列に書き込みたい場合は、QDataStream(QByteArray*, int) を使用してください。
QByteArray はQIODevice のサブクラスではないので、内部的には、バイト配列をラップするQBuffer が作成されます。
QDataStream::QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode)
バイト配列a を操作するデータストリームを構築します。mode には、デバイスの使用方法が記述されています。
また、単にバイト配列から読み取りたい場合は、QDataStream(constQByteArray &)を使用することもできます。
QByteArray はQIODevice のサブクラスではないので、内部的にはバイト配列をラップするためにQBuffer が作成されます。
[noexcept]
QDataStream::~QDataStream()
データ・ストリームを破棄します。
デストラクタは現在のI/Oデバイスには影響しない。ただし、コンストラクタで渡されたQByteArray を処理している内部I/Oデバイス(たとえばQBuffer )である場合は、内部I/Oデバイスが破壊される。
void QDataStream::abortTransaction()
読み取りトランザクションを中止する。
この関数は、上位プロトコルのエラーやストリームの同期が失われた後、トランザクショ ンを破棄するために一般的に使用される。
内部トランザクションで呼び出された場合、アボートは一番外側のトランザクションに委譲され、その後に開始された内部トランザクションは強制的に失敗させられる。
一番外側のトランザクションでは、ストリームの復元ポイントと内部的に重複しているデータを破棄します。ストリームの現在の読み取り位置には影響しません。
データ・ストリームの状態を
定数 | 説明 |
---|---|
ReadCorruptData | . |
startTransaction()、commitTransaction()、rollbackTransaction()も参照 。
bool QDataStream::atEnd() const
I/Oデバイスが終了位置(ストリームまたはファイルの終端)に達したか、I/Oデバイスが設定されていない場合はtrue
を返し、そうでない場合はfalse
を返します。
QIODevice::atEnd()も参照 。
QDataStream::ByteOrder QDataStream::byteOrder() const
現在のバイト順序設定 -BigEndian またはLittleEndian を返します。
setByteOrder() も参照 。
bool QDataStream::commitTransaction()
読み取りトランザクションを完了する。トランザクション中に読み取りエラーが発生しなかった場合はtrue
を返し、そうでない場合はfalse
を返す。
内側のトランザクションで呼び出された場合、コミットは、一番外側の commitTransaction()、rollbackTransaction()、またはabortTransaction() の呼び出しが発生するまで延期される。
それ以外の場合、ストリーム・ステータスがデータの終端を過ぎての読み取りを示す場合、この関数はstartTransaction() を呼び出した時点までストリーム・データをリストアします。このような状況が発生した場合、データがさらに到着するのを待つ必要があり、その後に新しいトランザクションを開始する。データ・ストリームが破損したデータを読み込んだり、内部トランザクションのいずれかが中止されたりした場合、この関数はトランザクションを中止します。
startTransaction()、rollbackTransaction()、abortTransaction()も参照のこと 。
QIODevice *QDataStream::device() const
現在設定されているI/Oデバイス、または現在設定されているデバイスがない場合はnullptr
を返す。
setDevice()も参照の こと。
QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const
データ・ストリームの浮動小数点精度を返す。
FloatingPointPrecision およびsetFloatingPointPrecision()も参照の こと。
[since 6.7]
QDataStream &QDataStream::readBytes(char *&s, qint64 &l)
ストリームからバッファs を読み取り、そのストリームへの参照を返します。
バッファs は、new []
を使用して割り当てられます。delete []
演算子を使用して破棄します。
l パラメータには、バッファの長さが設定されます。読み込んだ文字列が空の場合、l は 0 に設定され、s はnullptr
に設定されます。
直列化フォーマットは、最初に長さ指定子、次にl バイトのデータである。長さ指定子は、バージョンが6.7未満の場合、または要素数が0xfffffffe(2^32 -2)未満の場合は1つのquint32となり、そうでない場合は、拡張値0xfffffffeの後に実際の値を1つのquint64が続きます。さらに、isNull() をサポートするコンテナでは、すべてのビットが設定され、データがない 1 つの quint32 としてエンコードされます。
この関数は Qt 6.7 で導入されました。
readRawData() およびwriteBytes()も参照してください 。
qint64 QDataStream::readRawData(char *s, qint64 len)
ストリームから最大len バイトをs に読み込み、読み込んだバイト数を返します。エラーが発生した場合、この関数は -1 を返します。
バッファs は事前に確保されていなければならない。データはデコードされない。
readBytes()、QIODevice::read()、writeRawData()も参照のこと 。
void QDataStream::resetStatus()
データ・ストリームの状態をリセットします。
Status 、status()、setStatus()も参照の こと。
void QDataStream::rollbackTransaction()
読み取りトランザクションの取り消し。
この関数は、トランザクションをコミットする前に不完全な読み取りが検出された場合に、 トランザクションをロールバックするためによく使用される。
内側トランザクションで呼び出された場合、トランザクションの戻しは一番外側のトランザクションに委譲され、その後に開始された内側トランザクションは強制的に失敗させられる。
一番外側のトランザクションでは、ストリーム・データをstartTransaction() の呼び出し時点にリストアする。データ・ストリームが破損したデータを読み取った場合、または内部トランザクションのいずれかが中止された場合、この関数はトランザクションを中止する。
前のストリーム操作が成功した場合は、データ・ストリームのステータスを
定数 | 説明 |
---|---|
ReadPastEnd | . |
startTransaction ()、commitTransaction ()、abortTransaction ()も参照 。
void QDataStream::setByteOrder(QDataStream::ByteOrder bo)
直列化のバイト順をbo に設定します。
bo パラメータにはQDataStream::BigEndian またはQDataStream::LittleEndian を指定します。
デフォルトの設定はビッグ・エンディアンです。特別な要件がない限り、この設定のままにしておくことを推奨します。
byteOrder()も参照してください 。
void QDataStream::setDevice(QIODevice *d)
void QDataStream::setDevice(QIODevice *d)
I/Oデバイスをd に設定します。nullptr
で現在のI/Oデバイスへの設定を解除できます。
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)
データ・シリアライズ形式のバージョン番号をVersion enum の値であるv に設定します。
現在のバージョンの Qt を使用している場合は、バージョンを設定する必要はありませんが、独自のバイナリ形式を使用する場合は、設定することをお勧めします。詳細説明のVersioning を参照してください。
新しい機能に対応するために、Qt のいくつかのクラスではデータストリームのシリアライズフォーマットが変更されています。以前のバージョンの Qt で作成されたデータを読み込みたい場合、または以前のバージョンの Qt でコンパイルされたプログラムで読み込めるデータを書き込みたい場合は、この関数を使用してQDataStream で使用されるシリアライズ形式を変更してください。
Version enum は、Qt の異なるバージョンに対応する記号定数を提供します。例えば
QDataStream out(file); out.setVersion(QDataStream::Qt_4_0);
version() およびVersionも参照してください 。
qint64 QDataStream::skipRawData(qint64 len)
デバイスからlen バイトをスキップします。実際にスキップしたバイト数を返すか、エラーの場合は -1 を返します。
これは、長さlen のバッファに対してreadRawData() を呼び出し、バッファを無視するのと同じです。
QIODevice::seek()も参照のこと 。
void QDataStream::startTransaction()
ストリーム上で新しい読み取りトランザクションを開始する。
一連の読み取り操作の中で、復元可能なポイントを定義する。シーケンシャルデバイスの場合、読み込みデータは内部的に複製され、読み込みが不完全な場合に回復できるようになる。ランダムアクセスデバイスの場合、この関数はストリームの現在位置を保存する。commitTransaction()、rollbackTransaction()、またはabortTransaction()をコールして、現在のトランザクションを終了する。
トランザクションが開始されると、この関数を続けて呼び出すと、トランザクションが再帰的に実行される。内側のトランザクションは、一番外側のトランザクションのエージェントとして動作する(つまり、読み取り操作のステータスを一番外側のトランザクションに報告し、ストリームの位置を復元できる)。
注: 入れ子になったstartTransaction()呼び出しの時点へのリストアはサポートされていない。
トランザクション中にエラーが発生した場合(内部トランザクションの失敗を含む)、データ・ストリームからの読み取りは中断され(後続の読み取り操作はすべて空/ゼロ値を返す)、後続の内部トランザクションは強制的に失敗する。新しい一番外側のトランザクションを開始すると、この状態から回復する。この動作により、すべての読み取り操作を個別にエラーチェックする必要がなくなる。
commitTransaction()、rollbackTransaction()、abortTransaction()も参照のこと 。
QDataStream::Status QDataStream::status() const
データ・ストリームの状態を返す。
Status 、setStatus()、resetStatus()も参照 。
int QDataStream::version() const
データ直列化形式のバージョン番号を返します。
setVersion() およびVersion も参照して ください。
QDataStream &QDataStream::writeBytes(const char *s, qint64 len)
長さ指定子len とバッファs をストリームに書き込み、ストリームへの参照を返します。
len は、quint32 およびオプションの quint64 としてシリアライズされ、s からlen バイトが続きます。 データはエンコードされていないことに注意してください。
writeRawData() およびreadBytes()も参照 。
qint64 QDataStream::writeRawData(const char *s, qint64 len)
s からlen バイトをストリームに書き込みます。実際に書き込まれたバイト数、またはエラーの場合は -1 を返します。データはエンコードされません。
writeBytes()、QIODevice::write()、readRawData()も参照 。
QDataStream &QDataStream::operator<<(qint8 i)
符号付きバイトi をストリームに書き込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(bool i)
これはオーバーロードされた関数です。
ブーリアン値i をストリームに書き込みます。ストリームへの参照を返します。
[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<<(const char *s)
オーバーロードされた関数です。
終端文字列s をストリームに書き込み、ストリームへの参照を返します。
文字列はwriteBytes()
を使用してシリアライズされます。
writeBytes() およびwriteRawData()も参照して ください。
QDataStream &QDataStream::operator<<(double f)
これはオーバーロードされた関数です。
浮動小数点数f を、標準 IEEE 754 形式でストリームに書き込みます。ストリームへの参照を返します。
setFloatingPointPrecision()も参照してください 。
QDataStream &QDataStream::operator<<(float f)
これはオーバーロードされた関数です。
標準 IEEE 754 フォーマットを使用して、浮動小数点数f をストリームに書き込みます。ストリームへの参照を返します。
setFloatingPointPrecision()も参照してください 。
QDataStream &QDataStream::operator<<(qint16 i)
これはオーバーロードされた関数です。
符号付き 16 ビット整数i をストリームに書き込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(qint32 i)
これはオーバーロードされた関数です。
符号付き 32 ビット整数i をストリームに書き込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(qint64 i)
これはオーバーロードされた関数です。
符号付き 64 ビット整数i をストリームに書き込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(quint16 i)
これはオーバーロードされた関数です。
符号なし 16 ビット整数i をストリームに書き込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(quint32 i)
これはオーバーロードされた関数です。
符号なし整数i を 32 ビット符号なし整数(quint32)としてストリームに書き込みます。ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(quint64 i)
これはオーバーロードされた関数です。
符号なし 64 ビット整数i をストリームに書き込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(quint8 i)
これはオーバーロードされた関数です。
符号なしバイトi をストリームに書き込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator<<(std::nullptr_t ptr)
これはオーバーロードされた関数です。
std::nullptr_t
、ptr 、ストリームへの書き込みをシミュレートし、ストリームへの参照を返します。std::nullptr_t
値は 0 バイトとして格納されるため、この関数は実際にはストリームに何も書き込みません。
QDataStream &QDataStream::operator>>(bool &i)
i にストリームからブーリアン値を読み込みます。ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(qint8 &i)
i にストリームから符号付きバイトを読み取り、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(char *&s)
これはオーバーロードされた関数です。
ストリームから文字列s を読み取り、ストリームへの参照を返します。
文字列は、readBytes()
を使用してデシリアライズされます。ここで、シ リアライズ形式は、最初にquint32
の長さ指定子があり、その後にそのバイト数のデータが続きます。結果の文字列は常に'˶0'終端である。
文字列のスペースはnew []
を使用して確保されます - 呼び出し側はdelete []
で破棄する必要があります。
readBytes() およびreadRawData()も参照してください 。
[since 6.0]
QDataStream &QDataStream::operator>>(char16_t &c)
これはオーバーロードされた関数です。
ストリームから16ビット幅のcharをc に読み込み、ストリームへの参照を返します。
この関数は Qt 6.0 で導入されました。
[since 6.0]
QDataStream &QDataStream::operator>>(char32_t &c)
これはオーバーロードされた関数です。
ストリームから 32 ビット幅の文字をc に読み込み、ストリームへの参照を返します。
この関数は Qt 6.0 で導入されました。
QDataStream &QDataStream::operator>>(double &f)
これはオーバーロードされた関数です。
標準 IEEE 754 フォーマットを使用して、ストリームから浮動小数点数をf に読み込みます。ストリームへの参照を返します。
setFloatingPointPrecision()も参照してください 。
QDataStream &QDataStream::operator>>(float &f)
これはオーバーロードされた関数です。
標準 IEEE 754 フォーマットを使用して、ストリームから浮動小数点数をf に読み込みます。ストリームへの参照を返します。
setFloatingPointPrecision()も参照してください 。
QDataStream &QDataStream::operator>>(qint16 &i)
これはオーバーロードされた関数です。
符号付き 16 ビット整数をストリームからi に読み込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(qint32 &i)
これはオーバーロードされた関数です。
ストリームから符号付き 32 ビット整数をi に読み込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(qint64 &i)
これはオーバーロードされた関数です。
ストリームから符号付き 64 ビット整数をi に読み取り、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(quint16 &i)
これはオーバーロードされた関数です。
ストリームから符号なし 16 ビット整数をi に読み取り、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(quint32 &i)
これはオーバーロードされた関数です。
ストリームから符号なし 32 ビット整数をi に読み込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(quint64 &i)
これはオーバーロードされた関数です。
ストリームから符号なし 64 ビット整数をi に読み込み、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(quint8 &i)
これはオーバーロードされた関数です。
ストリームから符号なしバイトをi に読み取り、ストリームへの参照を返します。
QDataStream &QDataStream::operator>>(std::nullptr_t &ptr)
これはオーバーロードされた関数です。
ストリームからstd::nullptr_t
をptr に読み込むことをシミュレートし、ストリームへの参照を返します。std::nullptr_t
の値は 0 バイトとして格納されるため、この関数は実際にはストリームから何も読み取りません。
関連する非会員
[since 6.0]
template <typename T1, typename T2> QDataStream &operator<<(QDataStream &out, const std::pair<T1, T2> &pair)
ペアpair をストリームout に書き込みます。
この関数は、operator<<()
を実装するために T1 型と T2 型を必要とします。
この関数は Qt 6.0 で導入されました。
Qt データ型のシリアライズ」も参照してください 。
[since 6.0]
template <typename T1, typename T2> QDataStream &operator>>(QDataStream &in, std::pair<T1, T2> &pair)
ストリームin からペアをpair に読み込みます。
この関数は、operator>>()
を実装するために T1 型と T2 型を必要とします。
この関数は Qt 6.0 で導入されました。
Qt データ型のシリアライズ」も参照してください 。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。