このページでは

QDataStream Class

QDataStream クラスは、バイナリデータをQIODevice へシリアル化するための機能を提供します。詳細...

ヘッダー: #include <QDataStream>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承元: QIODeviceBase

注:このクラスのすべての関数は再入可能です。

パブリック型

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_12 }

パブリック関数

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)
(since 6.10) operator bool() const
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)
QDataStream &operator<<(QDataStream &ds, qfloat16 f)
QDataStream &operator>>(QDataStream &ds, qfloat16 &f)
(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 クラスは、I/Oデバイスの一例です。

例(ストリームへのバイナリデータの書き込み):

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() をサポートするコンテナについては、すべてのビットがセットされ、データが含まれない単一の quint32 としてエンコードされます。

一例を挙げると、文字列の長さが 32 ビットに収まる場合、char * の文字列は、'\0' バイトを含んだ文字列の長さに等しい 32 ビット整数として書き込まれ、その後に '\0' バイトを含んだ文字列のすべての文字が続きます。 文字列のサイズがそれより大きい場合、拡張サイズのマーカーとして値 0xffffffffe が書き込まれ、その後に実際のサイズを表す 64 ビットが続きます。char * 文字列を読み込む場合、最初に4バイトが読み込まれます。その値が0xffffffffe(拡張サイズのマーカー)と等しくない場合、これら4バイトは文字列の32ビットサイズとして扱われます。 それ以外の場合は、次の8バイトが読み込まれ、文字列の64ビットサイズとして扱われます。その後、char * 文字列のすべての文字(終端文字「'\0'」を含む)が読み込まれます。

バージョン管理

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_1);
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() は、読み込むデータの長さとして扱われる quint32 を読み取り、そのバイト数分のデータを事前に割り当てられた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::BigEndianQSysInfo::BigEndian最上位バイトから先(デフォルト)
QDataStream::LittleEndianQSysInfo::LittleEndian最下位バイトを先頭に設定

enum QDataStream::FloatingPointPrecision

データの読み書きに使用される浮動小数点数の精度。これは、データストリームのバージョンがQt_4_6 以降の場合にのみ有効です。

警告: データストリームを書き込むオブジェクトと読み込むオブジェクトの両方で、浮動小数点の精度を 同じ値に設定する必要があります。

定数値説明
QDataStream::SinglePrecision0データストリーム内のすべての浮動小数点数は、32 ビットの精度を持ちます。
QDataStream::DoublePrecision1データストリーム内のすべての浮動小数点数は、64 ビットの精度を持っています。

setFloatingPointPrecision() およびfloatingPointPrecision()も参照してください 。

enum QDataStream::Status

この列挙型は、データストリームの現在の状態を表します。

定数値説明
QDataStream::Ok0データストリームは正常に動作しています。
QDataStream::ReadPastEnd1データストリームは、基盤となるデバイス内のデータの末尾を超えて読み込みを行っています。
QDataStream::ReadCorruptData2データストリームが破損したデータを読み取りました。
QDataStream::WriteFailed3データストリームが基盤となるデバイスに書き込みを行えません。
QDataStream::SizeLimitExceeded (since Qt 6.7)4データストリームは、データのサイズが現在のプラットフォームでサポートされている上限を超えているため、データの読み取りまたは書き込みを行うことができません。これは、たとえば、32 ビットプラットフォームで 2 GiB を超えるデータを読み取ろうとした場合などに発生することがあります。

enum QDataStream::Version

この列挙型は、データシリアライゼーション形式のバージョン番号に対するシンボリックな別名を提供します。

定数値
QDataStream::Qt_1_01
QDataStream::Qt_2_02
QDataStream::Qt_2_13
QDataStream::Qt_3_04
QDataStream::Qt_3_15
QDataStream::Qt_3_36
QDataStream::Qt_4_07
QDataStream::Qt_4_1Qt_4_0
QDataStream::Qt_4_28
QDataStream::Qt_4_39
QDataStream::Qt_4_410
QDataStream::Qt_4_511
QDataStream::Qt_4_612
QDataStream::Qt_4_7Qt_4_6
QDataStream::Qt_4_8Qt_4_7
QDataStream::Qt_4_9Qt_4_8
QDataStream::Qt_5_013
QDataStream::Qt_5_114
QDataStream::Qt_5_215
QDataStream::Qt_5_3Qt_5_2
QDataStream::Qt_5_416
QDataStream::Qt_5_5Qt_5_4
QDataStream::Qt_5_617
QDataStream::Qt_5_7Qt_5_6
QDataStream::Qt_5_8Qt_5_7
QDataStream::Qt_5_9Qt_5_8
QDataStream::Qt_5_10Qt_5_9
QDataStream::Qt_5_11Qt_5_10
QDataStream::Qt_5_1218
QDataStream::Qt_5_1319
QDataStream::Qt_5_14Qt_5_13
QDataStream::Qt_5_15Qt_5_14
QDataStream::Qt_6_020
QDataStream::Qt_6_1Qt_6_0
QDataStream::Qt_6_2Qt_6_0
QDataStream::Qt_6_3Qt_6_0
QDataStream::Qt_6_4Qt_6_0
QDataStream::Qt_6_5Qt_6_0
QDataStream::Qt_6_621
QDataStream::Qt_6_722
QDataStream::Qt_6_8Qt_6_7
QDataStream::Qt_6_9Qt_6_7
QDataStream::Qt_6_1023
QDataStream::Qt_6_1124
QDataStream::Qt_6_12Qt_6_11

関連項目: 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()

データストリームを破棄します。

デストラクタは、現在のI/Oデバイスには影響を与えません。ただし、コンストラクタで渡されたQByteArray を処理している内部I/Oデバイス(例:QBuffer )である場合は例外であり、その場合は内部I/Oデバイスが破棄されます。

void QDataStream::abortTransaction()

読み取りトランザクションを中止します。

この関数は、上位プロトコルのエラーやストリームの同期が失われた後に、トランザクションを破棄するために一般的に使用されます。

内部トランザクションに対して呼び出された場合、中止処理は最外部のトランザクションに委譲され、その後開始された内部トランザクションは強制的に失敗となります。

最外部のトランザクションについては、復元ポイントおよびストリームの内部で複製されたデータを破棄します。ストリームの現在の読み取り位置には影響しません。

データストリームのステータスを

Constant説明
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() をサポートするコンテナの場合、すべてのビットがセットされ、データが含まれない単一の 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()の呼び出し時点の状態に復元します。データストリームが破損したデータを読み込んだ場合、または内部トランザクションのいずれかが中止された場合、この関数はトランザクションを中止します。

先行するストリーム操作が成功した場合は、データストリームのステータスを

Constant説明
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 に設定します。

resetStatus() が呼び出されるまで、その後の setStatus() への呼び出しは無視されます。

Status 、status()、およびresetStatus()も参照してください 。

void QDataStream::setVersion(int v)

データシリアライゼーション形式のバージョン番号を、Version 列挙型の値であるv に設定します。

Qt の最新バージョンを使用している場合は、バージョンを設定する必要はありませんが、独自のバイナリ形式を使用する場合は、設定することをお勧めします。詳細については、「詳細な説明」の「Versioning 」を参照してください。

新機能に対応するため、一部の Qt クラスのデータストリームシリアライゼーション形式は、Qt のバージョンによって変更されています。 以前のバージョンの Qt で作成されたデータを読み込む場合、または以前のバージョンの Qt でコンパイルされたプログラムで読み込めるデータを書き込む場合は、この関数を使用してQDataStream が使用するシリアライズ形式を変更してください。

Version 列挙型は、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()も参照してください 。

[explicit noexcept, since 6.10] QDataStream::operator bool() const

このストリームにエラーがないかどうかを返します(status() はOk を返します)。

この関数は Qt 6.10 で導入されました。

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)

「\0 」で終了する文字列 `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)

i の値を持つ符号なし 16 ビット整数をストリームに書き込み、そのストリームへの参照を返します。

これはオーバーロードされた関数です。

QDataStream &QDataStream::operator<<(quint32 i)

i の値を持つ符号なし整数を、32 ビットの符号なし整数(quint32)としてストリームに書き込みます。ストリームへの参照を返します。

これはオーバーロードされた関数です。

QDataStream &QDataStream::operator<<(quint64 i)

i の符号なし64ビット整数をストリームに書き込み、そのストリームへの参照を返します。

これはオーバーロードされた関数です。

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 データ型のシリアライズ」も参照してください 。

QDataStream &operator<<(QDataStream &ds, qfloat16 f)

浮動小数点数 `f` を、標準のIEEE 754形式を使用してストリーム `ds ` に書き込みます。ストリームへの参照を返します。

注: Qt 6.3 以前のバージョンでは 、これは `QDataStream` のメンバ関数でした。

QDataStream &operator>>(QDataStream &ds, qfloat16 &f)

標準のIEEE 754形式を使用して、ストリームds から浮動小数点数をf に読み込みます。ストリームへの参照を返します。

注: Qt 6.3 以前のバージョンでは 、これは `QDataStream` のメンバ関数でした。

[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 データ型のシリアライズ」も参照してください 。

© 2026 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.