QDataStream Class
QDataStreamクラスは、バイナリ・データをQIODevice にシリアライズします。
ヘッダー | #include <QDataStream> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
を継承する: | 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) |
(until 6.11) QDataStream & | readBytes(char *&s, uint &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 を使用するデータ・ストリームを構築する。
setDevice() およびdevice()も参照のこと 。
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()
データストリームを破棄する。
ただし、コンストラクタで渡された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()も参照してください 。
[until 6.11]
QDataStream &QDataStream::readBytes(char *&s, uint &l)
この関数はバージョン6.11で非推奨となる予定です。
代わりに qint64 length を取るオーバーロードを使用してください。
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)
これはオーバーロードされた関数である。
浮動小数点数f を標準 IEEE 754 フォーマットでストリームに書き込む。ストリームへの参照を返します。
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 データ型のシリアライズ」も参照してください 。
© 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.