QCborStreamReader Class

QCborStreamReaderクラスは、シンプルなCBORストリーム・デコーダで、QByteArray またはQIODevice のいずれかで動作します。 ... 詳細

Header: #include <QCborStreamReader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注:このクラスの関数は全てリエントラントです。

パブリック型

struct StringResult
enum StringResultCode { EndOfString, Ok, Error }
enum Type { UnsignedInteger, NegativeInteger, ByteArray, ByteString, String, …, Invalid }

パブリック関数

QCborStreamReader()
QCborStreamReader(QIODevice *device)
QCborStreamReader(const QByteArray &data)
QCborStreamReader(const char *data, qsizetype len)
QCborStreamReader(const quint8 *data, qsizetype len)
~QCborStreamReader()
void addData(const QByteArray &data)
void addData(const char *data, qsizetype len)
void addData(const quint8 *data, qsizetype len)
void clear()
int containerDepth() const
qint64 currentOffset() const
qsizetype currentStringChunkSize() const
QIODevice *device() const
bool enterContainer()
bool hasNext() const
bool isArray() const
bool isBool() const
bool isByteArray() const
bool isContainer() const
bool isDouble() const
bool isFalse() const
bool isFloat16() const
bool isFloat() const
bool isInteger() const
bool isInvalid() const
bool isLengthKnown() const
bool isMap() const
bool isNegativeInteger() const
bool isNull() const
bool isSimpleType() const
bool isSimpleType(QCborSimpleType st) const
bool isString() const
bool isTag() const
bool isTrue() const
bool isUndefined() const
bool isUnsignedInteger() const
bool isValid() const
QCborError lastError() const
bool leaveContainer()
quint64 length() const
bool next(int maxRecursion = 10000)
QCborStreamReader::Type parentContainerType() const
(since 6.7) QByteArray readAllByteArray()
(since 6.7) QString readAllString()
(since 6.7) QByteArray readAllUtf8String()
(since 6.7) bool readAndAppendToByteArray(QByteArray &dst)
(since 6.7) bool readAndAppendToString(QString &dst)
(since 6.7) bool readAndAppendToUtf8String(QByteArray &dst)
QCborStreamReader::StringResult<QByteArray> readByteArray()
QCborStreamReader::StringResult<QString> readString()
QCborStreamReader::StringResult<qsizetype> readStringChunk(char *ptr, qsizetype maxlen)
(since 6.7) QCborStreamReader::StringResult<QByteArray> readUtf8String()
void reparse()
void reset()
void setDevice(QIODevice *device)
bool toBool() const
double toDouble() const
qfloat16 toFloat16() const
float toFloat() const
qint64 toInteger() const
QCborNegativeInteger toNegativeInteger() const
QCborSimpleType toSimpleType() const
QCborTag toTag() const
quint64 toUnsignedInteger() const
QCborStreamReader::Type type() const

詳細説明

このクラスは、QByteArray またはQIODevice から直接 CBOR コンテンツのストリームをデコードするために使用できます。 CBOR とは Concise Binary Object Representation のことで、JSON と互換性のある非常にコンパクトな形式のバイナリデータエンコーディングです。これはIETFのConstrained RESTful Environments (CoRE) WGによって作成され、多くの新しいRFCで使用されている。CoAPプロトコルと並行して使用することを想定している。

QCborStreamReaderは、QXmlStreamReader に似たStAXライクなAPIを提供する。これを使用するには、CBORエンコーディングの知識が少し必要である。よりシンプルなAPIについては、QCborValue 、特にデコード関数QCborValue::fromCbor ()を参照のこと。

通常、コンストラクタにパラメータとしてソースQByteArray またはQIODevice を渡して QCborStreamReader を作成し、デコード時にエラーがなければストリームから要素をポップ・オフします。CBORタイプには3種類ある:

種類種類振る舞い
固定幅整数、タグ、単純型、浮動小数点値はQCborStreamReaderによって事前に解析されるため、アクセサ関数はconst 。前に進むには、next ()を呼び出す必要があります。
文字列バイト配列、テキスト文字列長さ(既知の場合)は事前に解析されるが、文字列自体は解析されない。アクセサ関数は定数ではないので、メモリを確保することができる。アクセッサ関数が呼び出されると、自動的に次の要素に進みます。
コンテナ配列、マップ長さ(既知の場合)は事前に解析されます。要素にアクセスするには、enterContainer ()をコールし、すべての要素を読み込んでから、leaveContainer ()をコールしなければならない。この関数は次の要素に進みます。

つまり、プロセッサー関数は通常このようになる:

   void handleStream(QCborStreamReader &reader)
   {
       switch (reader.type())
       case QCborStreamReader::UnsignedInteger:
       case QCborStreamReader::NegativeInteger:
       case QCborStreamReader::SimpleType:
       case QCborStreamReader::Float16:
       case QCborStreamReader::Float:
       case QCborStreamReader::Double:
           handleFixedWidth(reader);
           reader.next();
           break;
       case QCborStreamReader::ByteArray:
       case QCborStreamReader::String:
           handleString(reader);
           break;
       case QCborStreamReader::Array:
       case QCborStreamReader::Map:
           reader.enterContainer();
           while (reader.lastError() == QCborError::NoError)
               handleStream(reader);
           if (reader.lastError() == QCborError::NoError)
               reader.leaveContainer();
       }
   }

CBORサポート

以下の表は、QCborStreamReaderがサポートしているCBOR機能の一覧です。

機能サポート
符号なし数値はい(フルレンジ)
負数あり(全範囲)
バイト文字列はい
テキスト文字列あり
チャンク文字列はい
タグはい(任意)
ブーリアンはい
ヌルはい
未定義はい
任意の単純値あり
半精度浮動小数点(16ビット)はい
単精度浮動小数点(32ビット)はい
倍精度浮動小数点(64ビット)あり
無限大とNaN浮動小数点はい
確定長配列とマップはい
不定長配列とマップはい
文字列と整数以外のマップキー型あり(任意)

無効または不完全なCBORストリームへの対応

QCborStreamReaderは、それ自身で破損した入力を検出することができる。QCborStreamReader が使用するライブラリは、あらゆる種類の無効な入力に対して広範にテストされており、エラーを報告することができます。何らかのエラーが検出された場合、QCborStreamReader はlastError() にQCborError::NoError 以外の値を設定し、どのような状況が検出されたかを示します。

QCborStreamReader が通常のアイテム解析中に検出したエラーのほとんどは回復不可能です。QCborStreamReader を使用するコードは、適切にデコードされたデータを処理することも、データ全体を破棄することもできます。

回復可能な唯一のエラーはQCborError::EndOfFile で、これは構文解析を完了するためにさらにデータが必要であることを示します。この状況は、データがパイプ(QProcess )やソケット(QTcpSocketQUdpSocketQNetworkReply など)のような非同期ソースから読み込まれる場合に便利である。より多くのデータが到着すると、周囲のコードは、QByteArray から解析する場合はaddData() を、より多くのデータが利用可能になった QIDOevice から直接読み込む場合はreparse() を呼び出す必要があります(setDevice() を参照)。

QCborStreamWriter,QCborValue,QXmlStreamReader,CBORデータの解析と表示,Serialization Converter,ゲームの保存と読み込みも参照

メンバ型ドキュメント

enum QCborStreamReader::StringResultCode

この enum はreadString() とreadByteArray() によって返され、解析のステータスを示すために使用される。

定数説明
QCborStreamReader::EndOfString0文字列の解析は完了し、エラーはありません。
QCborStreamReader::Ok1関数はデータを返しました。エラーはありません。
QCborStreamReader::Error-1解析はエラーで失敗した。

enum QCborStreamReader::Type

この列挙は、QCborStreamReader によってデコードされた、すべての可能な CBOR 型を含む。CBORには7つの主要な型と、値を持たない単純な型、浮動小数点値があります。

定数説明
QCborStreamReader::UnsignedInteger0x00(メジャー・タイプ 0) 0 から264- 1 までの範囲(18,446,744,073,709,551,616)。
QCborStreamReader::NegativeInteger0x20(メジャータイプ 1)-1 から-264までの範囲(-18,446,744,073,709,551,616)。
QCborStreamReader::ByteArrayByteString(メジャータイプ2) 任意のバイナリデータ。
QCborStreamReader::ByteString0x40ByteArray のエイリアス。
QCborStreamReader::StringTextString(メジャー型 3) Unicode テキス ト 。
QCborStreamReader::TextString0x60String のエイリアス。
QCborStreamReader::Array0x80(メジャー型 4) 異種項目の配列。
QCborStreamReader::Map0xa0(メジャー型 5) 異種項目のマップ / ディクショナリ。
QCborStreamReader::Tag0xc0(メジャータイプ 6) 一般的な CBOR 項目にさらなる意味的価値を与える数値。詳細はQCborTag を参照。
QCborStreamReader::SimpleType0xe0(メジャータイプ 7) それ以上の値を持たないタイプ。ブーリアン(真と偽)、ヌル、未定義を含む。
QCborStreamReader::Float16HalfFloatIEEE 754 半精度浮動小数点 (qfloat16)。
QCborStreamReader::HalfFloat0xf9Float16 のエイリアス。
QCborStreamReader::Float0xfaIEEE 754 単精度浮動小数点 (float)。
QCborStreamReader::Double0xfbIEEE 754 倍精度浮動小数点 (double)。
QCborStreamReader::Invalid0xff構文解析エラー、または配列やマップの末尾に達したため、有効な型ではありません。

メンバ関数ドキュメント

QCborStreamReader::QCborStreamReader()

ソースデータを持たないQCborStreamReaderオブジェクトを作成します。作成後、QCborStreamReader は解析エラーを報告します。

データを追加するには、addData ()を呼び出すか、setDevice ()を使用して別のソース・デバイスを設定する。

addData() およびisValid()も参照の こと。

[explicit] QCborStreamReader::QCborStreamReader(QIODevice *device)

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

device から読み込んだ CBOR ストリームを解析する QCborStreamReader オブジェクトを作成します。QCborStreamReaderはdevice の所有権を持たないため、このオブジェクトが破棄されるまで有効である必要があります。

[explicit] QCborStreamReader::QCborStreamReader(const QByteArray &data)

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

data で見つかった CBOR ストリームを解析する QCborStreamReader オブジェクトを作成します。

QCborStreamReader::QCborStreamReader(const char *data, qsizetype len)

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

data から始まるlen バイトのデータを持つ QCborStreamReader オブジェクトを作成します。このポインターは、QCborStreamReaderが破棄されるまで有効です。

QCborStreamReader::QCborStreamReader(const quint8 *data, qsizetype len)

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

data から始まるlen バイトのデータを持つ QCborStreamReader オブジェクトを作成します。このポインタはQCborStreamReaderが破棄されるまで有効でなければなりません。

[noexcept] QCborStreamReader::~QCborStreamReader()

このQCborStreamReader オブジェクトを破棄し、関連するリソースを解放します。

void QCborStreamReader::addData(const QByteArray &data)

CBOR ストリームにdata を追加し、現在のエレメントを解析し直します。この関数は、ストリームの処理中にデータの終端に達したが、さらにデータが利用可能になった場合に便利です。

void QCborStreamReader::addData(const char *data, qsizetype len)

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

data から始まるlen バイトのデータをCBORストリームに追加し、現在の要素を解析し直す。この関数は、ストリームの処理中にデータの終端に達したが、より多くのデータが利用可能になった場合に有用である。

void QCborStreamReader::addData(const quint8 *data, qsizetype len)

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

data から始まるlen バイトのデータをCBORストリームに追加し、現在の要素を解析し直す。この関数は、ストリーム処理中にデータの終端に達したが、さらにデータが利用可能になった場合に有用である。

void QCborStreamReader::clear()

デコーダーの状態をクリアし、入力ソースデータを空のバイト配列にリセットする。この関数が呼ばれた後、QCborStreamReader は解析エラーを示す。

解析するデータを追加するには、addData ()を呼び出す。

reset() およびsetDevice()も参照

int QCborStreamReader::containerDepth() const

このストリームがenterContainer() で入ったコンテナのうち、まだ出ていないコンテナの数を返します。

enterContainer() およびleaveContainer() も参照

qint64 QCborStreamReader::currentOffset() const

現在デコード中の項目の入力ストリーム内のオフセットを返します。現在のオフセットは、ソースデータがQByteArray であるか、デコード開始時に先頭に位置していたQIODevice である場合にのみ、それまでにデコードされたバイト数となる。

reset()、clear()、device()も参照

qsizetype QCborStreamReader::currentStringChunkSize() const

現在のテキストまたはバイト文字列チャンクのサイズを返す。CBORストリームにチャンクされていない文字列が含まれる場合(つまり、isLengthKnown() がtrue を返す場合)、この関数は、length() と同じ、文字列全体のサイズを返します。

この関数は、後でreadStringChunk() に渡すバッファのポインタを事前に確保するのに便利です。

readString()、readByteArray()、readStringChunk()も参照

QIODevice *QCborStreamReader::device() const

setDevice() またはQCborStreamReader コンストラクタで設定されたQIODevice を返す。このオブジェクトがQByteArray から読み込んでいた場合、この関数は代わりに nullptr を返します。

setDevice()も参照

bool QCborStreamReader::enterContainer()

現在の項目である配列またはマップに入り、コンテナに含まれる要素を反復処理する準備をします。コンテナへの入力が成功した場合は true を返し、そうでない場合は false を返します(通常は解析エラー)。enterContainer() を呼び出すたびに、leaveContainer() を呼び出す必要があります。

この関数は、現在の項目が配列またはマップである場合(つまり、isArray()、isMap()、またはisContainer() が真である場合)にのみ呼び出すことができます。それ以外の条件でこの関数を呼び出すとエラーになります。

leaveContainer()、isContainer()、isArray() およびisMap()も参照

[noexcept] bool QCborStreamReader::hasNext() const

現在のコンテナ内にデコードすべき項目がまだある場合は真を、コンテナの終端に達した場合は偽を返す。ルート要素をパースしている場合、hasNext() が false を返すと、パースが完了したことになります。そうでない場合、コンテナの深さが 0 以外の場合は、外側のコードでleaveContainer() を呼び出す必要があります。

parentContainerType()、containerDepth()、leaveContainer()も参照

bool QCborStreamReader::isArray() const

現在の要素の型が配列の場合、true を返します(つまり、type() がQCborStreamReader::Array を返す場合)。この関数が真を返した場合、enterContainer() を呼び出して、そのコンテナの解析を開始できます。

現在の要素が配列の場合、isLengthKnown ()をコールして、配列のサイズが CBORストリームで明示されているかどうかを調べることもできる。もしそうであれば、length ()を呼び出すことで、そのサイズを取得することができる。

以下の例では、より効率的なデコードのために、配列のサイズを指定してQVariantList

   QVariantList populateFromCbor(QCborStreamReader &reader)
   {
       QVariantList list;
       if (reader.isLengthKnown())
           list.reserve(reader.length());

       reader.enterContainer();
       while (reader.lastError() == QCborError::NoError && reader.hasNext())
           list.append(readOneElement(reader));
       if (reader.lastError() == QCborError::NoError)
           reader.leaveContainer();
   }

注: 上記のコードでは、長さが適切な値であるかどうかを検証していない。入力ストリームが長さを10億要素と報告した場合、上記の関数は16GB以上のRAMを割り当てようとし、クラッシュにつながる可能性があります。

type()、isMap()、isLengthKnown()、length()、enterContainer()、leaveContainer()も参照

bool QCborStreamReader::isBool() const

現在の要素が真偽値 (true またはfalse) の場合は真を、それ以外の場合は偽を返します。この関数が true を返した場合は、toBool() を呼び出してブーリアン値を取得できます。また、toSimpleType() を呼び出し、QCborSimpleValue::True または QCborSimpleValue::False と比較することもできます。

type()、isFalse()、isTrue()、toBool()、isSimpleType()、toSimpleType()も参照してください

bool QCborStreamReader::isByteArray() const

現在の要素の型がバイト配列の場合(つまり、type() がQCborStreamReader::ByteArray を返す場合)、true を返します。この関数が真を返した場合、readByteArray() を呼び出して、そのデータを読み込むことができます。

type()、readByteArray()、isString()も参照

bool QCborStreamReader::isContainer() const

現在の要素がコンテナ(つまり、配列またはマップ)の場合は true を返し、それ以外の場合は false を返します。現在の要素がコンテナである場合、isLengthKnown() 関数を使用して、コンテナのサイズがストリーム内で明示されているかどうかを調べ、明示されている場合は、length() を使用してそのサイズを取得することができます。

さらに重要なのは、コンテナに対してenterContainer() 関数を使用し、コンテナに含まれる要素の反復処理を開始できることである。

type(),isArray(),isMap(),isLengthKnown(),length(),enterContainer(),leaveContainer(),containerDepth()も参照

bool QCborStreamReader::isDouble() const

現在の要素の型が IEEE 754 倍精度浮動小数点の場合、true を返します(つまり、type() がQCborStreamReader::Double を返す場合)。この関数が真を返した場合、toDouble() を呼び出して、そのデータを読み込むことができます。

type()、toDouble()、isFloat16()、isFloat()も参照

bool QCborStreamReader::isFalse() const

現在の要素がfalse の値の場合は true を返し、それ以外の場合は false を返します。

type()、isTrue()、isBool()、toBool()、isSimpleType()、toSimpleType()も参照

bool QCborStreamReader::isFloat16() const

現在の要素の型が IEEE 754 半精度浮動小数点の場合、true を返します(つまり、type() がQCborStreamReader::Float16 を返す場合)。この関数が真を返した場合、toFloat16() を呼び出して、そのデータを読み込むことができます。

type()、toFloat16()、isFloat()、isDouble()も参照

bool QCborStreamReader::isFloat() const

現在の要素の型が IEEE 754 単精度浮動小数点の場合(つまり、type() がQCborStreamReader::Float を返す場合)、true を返します。この関数が真を返した場合、toFloat() を呼び出して、そのデータを読み込むことができます。

type()、toFloat()、isFloat16()、isDouble()も参照

bool QCborStreamReader::isInteger() const

現在の要素の型が符号なし整数または負の整数である場合(つまり、type() がQCborStreamReader::UnsignedInteger またはQCborStreamReader::NegativeInteger を返す場合)、true を返します。この関数が真を返した場合、toInteger() を呼び出してその値を読み込むことができます。

type()、toInteger()、toUnsignedInteger()、toNegativeInteger()、isUnsignedInteger()、isNegativeInteger()も参照

bool QCborStreamReader::isInvalid() const

現在の要素が無効な場合は真を、そうでない場合は偽を返します。現在の要素が無効なのは、デコード・エラーがあった場合や、配列やマップの最後の要素をパースした場合などです。

注意: この関数はisNull() と混同しないでください。Nullは通常のCBOR型であり、アプリケーションで処理する必要があります。

type() およびisValid()も参照

[noexcept] bool QCborStreamReader::isLengthKnown() const

現在の配列、マップ、バイト配列、文字列の長さが既知(CBORストリームで明示的)の場合はtrueを返し、そうでない場合はfalseを返します。この関数は、要素がこれらのいずれかである場合にのみ呼び出されるべきです。

長さが既知の場合は、length ()を呼び出すことで取得できます。

マップや配列の長さが既知でない場合、それはストリームに存在する要素数によって暗示されます。QCborStreamReader は、そのような状態で長さを計算するAPIを持っていません。

文字列やバイト配列も、長さが不定になる可能性があります(つまり、複数のチャンクで送信される可能性があります)。これらは現在のところQCborStreamWriter では作成できませんが、他のエンコーダーでは作成できる可能性があるので、QCborStreamReader ではサポートしています。

length()、QCborStreamWriter::startArray()、QCborStreamWriter::startMap()も参照のこと

bool QCborStreamReader::isMap() const

現在の要素の型がマップの場合、true を返します(つまり、type() がQCborStreamReader::Map を返す場合)。この関数が真を返した場合、enterContainer() を呼び出して、そのコンテナの解析を開始できます。

現在の要素がマップである場合、isLengthKnown ()を呼び出して、マップのサイズがCBORストリームで明示されているかどうかを調べることもできる。もしそうであれば、length ()を呼び出すことで、そのサイズを取得することができる。

以下の例では、より効率的なデコードのために、マップのサイズを指定してQVariantMap を事前に割り当てています:

   QVariantMap populateFromCbor(QCborStreamReader &reader)
   {
       QVariantMap map;
       if (reader.isLengthKnown())
           map.reserve(reader.length());

       reader.enterContainer();
       while (reader.lastError() == QCborError::NoError && reader.hasNext()) {
           QString key = readElementAsString(reader);
           map.insert(key, readOneElement(reader));
       }
       if (reader.lastError() == QCborError::NoError)
           reader.leaveContainer();
   }

上の例では、readElementAsString という関数を使用してマップのキーを読み取り、文字列を取得している。CBORマップは文字列だけでなく、どんな型でもキーとして含むことができるからだ。ユーザー・コードはこの変換を行うか、文字列でないキーを拒否するか、あるいはQVariantMapQVariantHash 以外の別のコンテナを使用する必要がある。例えば、マップが整数のキーを含むと予想される場合、ストリームのサイズと構文解析を軽減するために推奨される、正しいコンテナは\l{QMap}<int, QVariant> または\l{QHash}<int, QVariant> であろう。

注意: 上記のコードでは、長さが適切な値であるかどうかを検証していない。入力ストリームが長さを10億要素と報告した場合、上記の関数は24GB以上のRAMを割り当てようとし、クラッシュにつながる可能性があります。

type()、isArray()、isLengthKnown()、length()、enterContainer()、leaveContainer()も参照

bool QCborStreamReader::isNegativeInteger() const

現在の要素の型が負の整数の場合、true を返します(つまり、type() がQCborStreamReader::NegativeInteger を返す場合)。この関数が真を返した場合、toNegativeInteger() またはtoInteger() を呼び出して、その値を読み込むことができます。

type()、toNegativeInteger()、toInteger()、isInteger()、isUnsignedInteger()も参照

bool QCborStreamReader::isNull() const

現在の要素がnull の値であれば真を、それ以外であれば偽を返します。Null 値は、オプションのデータがないことを示すために使用できます。

注: この関数はisValid() の反対語ではない。Null 値は有効な CBOR 値である。

type()、isSimpleType()、toSimpleType()も参照

bool QCborStreamReader::isSimpleType() const

現在の要素の型が、nullやundefinedだけでなく、ブーリアン値(trueやfalse)を含む、任意のCBOR単純型の場合にtrueを返します。どの単純型かを調べるには、toSimpleType() を呼び出します。あるいは、特定の単純型をテストするには、QCborSimpleType パラメータを取るオーバーロードを呼び出します。

CBOR単純型は、余分な値を持たない型である。255の可能性があるが、現在定義された意味を持つ値は4つしかない。コードは未知の単純型に対処することは期待されておらず、未知の単純型が見つかれば、単にストリームを無効として破棄するかもしれない。

QCborSimpleTypetype()、isSimpleType(QCborSimpleType)、toSimpleType()も参照

bool QCborStreamReader::isSimpleType(QCborSimpleType st) const

現在の要素の型が単純型st である場合は true を返し、そうでない場合は false を返します。この関数が真を返す場合、toSimpleType() はst を返します。

CBOR単純型は、余分な値を持たない型である。255の可能性があるが、現在定義された意味を持つ値は4つしかない。コードは、未知の単純型に対処することは期待されておらず、未知の単純型が見つかれば、単にストリームを無効として破棄するかもしれない。

QCborSimpleTypetype()、isSimpleType()、toSimpleType()も参照のこと

bool QCborStreamReader::isString() const

現在の要素の型がテキスト文字列の場合、true を返します(つまり、type() がQCborStreamReader::String を返す場合)。この関数が真を返した場合、readString() を呼び出して、そのデータを読み込むことができます。

type()、readString()、isByteArray()も参照

bool QCborStreamReader::isTag() const

現在の要素の型が CBOR タグである場合(つまり、type() がQCborStreamReader::Tag を返す場合)、true を返します。この関数が真を返した場合、toTag() を呼び出して、そのデータを読み込むことができます。

type() およびtoTag()も参照

bool QCborStreamReader::isTrue() const

現在の要素がtrue の値の場合は true を返し、それ以外の場合は false を返します。

type()、isFalse()、isBool()、toBool()、isSimpleType()、toSimpleType()も参照

bool QCborStreamReader::isUndefined() const

現在の要素がundefined の値であれば真を、それ以外であれば偽を返します。未定義の値は、ストリームの作成時に何らかの変換に失敗したか、変換できなかったことを示すためにエンコードされることがあります。QCborStreamReader は決して置換を行わず、この関数は、ストリームに明示的な未定義の値が含まれている場合にのみ真を返します。

type()、isSimpleType()、toSimpleType()も参照

bool QCborStreamReader::isUnsignedInteger() const

現在の要素の型が符号なし整数である場合(つまり、type() がQCborStreamReader::UnsignedInteger を返す場合)、true を返します。この関数が真を返した場合、toUnsignedInteger() またはtoInteger() を呼び出して、その値を読み込むことができます。

type()、toUnsignedInteger()、toInteger()、isInteger()、isNegativeInteger()も参照

bool QCborStreamReader::isValid() const

現在の要素が有効な場合は真を、そうでない場合は偽を返します。現在の要素が無効なのは、デコードエラーがあった場合や、配列やマップの最後の要素をパースした場合などです。

注意: この関数はisNull() の逆ではありません。Nullは通常のCBOR型であり、アプリケーションによって処理されなければならない。

type() およびisInvalid()も参照

QCborError QCborStreamReader::lastError() const

ストリームのデコードで最後にエラーが発生した場合、そのエラーを返します。エラーが発生しなかった場合は、QCborError::NoError を返します。

isValid()も参照

bool QCborStreamReader::leaveContainer()

アイテムが処理されていた配列またはマップを離れ、コンテナの終端の次のアイテムにデコーダを配置します。コンテナからの離脱に成功した場合は true を返し、失敗した場合は false を返します (通常は解析エラー)。enterContainer() を呼び出すたびに、leaveContainer() を呼び出す必要がある。

この関数は、hasNext() が false を返し、containerDepth() が 0 でない場合にのみ呼び出すことができる。それ以外の状態でこの関数を呼び出すとエラーになります。

enterContainer()、parentContainerType()、containerDepth()も参照

quint64 QCborStreamReader::length() const

文字列またはバイト配列の長さ、配列の項目数、またはマップの項目ペアの数を返します(既知の場合)。長さが不明な場合(つまりisLengthKnown() が偽を返した場合)は、この関数を呼んではならない。これはエラーであり、QCborStreamReader が入力ストリームの解析を停止する原因となる。

isLengthKnown()、QCborStreamWriter::startArray()、QCborStreamWriter::startMap()も参照

bool QCborStreamReader::next(int maxRecursion = 10000)

CBORストリームのデコードを1要素進める。この関数は通常、固定幅の基本要素(つまり、整数、単純値、タグ、浮動小数点値)をパースするときに呼び出すべきです。しかし、この関数はカレントアイテムが文字列、配列、マップのときにも呼び出すことができ、含まれるすべての要素を含めてその要素全体をスキップします。

この関数は、スキップが成功した場合はtrueを返し、失敗した場合はfalseを返します。ストリームが破損していたり、不完全であったり、配列やマップの入れ子レベルがmaxRecursion を超えていたりすると、失敗することがあります。hasNext() が偽を返したときにこの関数を呼び出すこともエラーとなる。この関数が false を返した場合、lastError() は、失敗の詳細を示すエラー・コードを返します。

lastError()、isValid()、hasNext()も参照

QCborStreamReader::Type QCborStreamReader::parentContainerType() const

QCborStreamReader::Array またはQCborStreamReader::Map のいずれかを返します。それぞれ、現在の項目を含むコンテナが配列であったかマップであったかを示します。現在ルート要素をパースしている場合、この関数はQCborStreamReader::Invalid を返します。

containerDepth() およびenterContainer()も参照

[since 6.7] QByteArray QCborStreamReader::readAllByteArray()

現在のバイト文字列をデコードして返します。文字列がチャンク化されている場合、この関数はすべてのチャンクを繰り返し処理し、それらを連結します。エラーが発生した場合、この関数はデフォルトで構築された QByteArray() を返しますが、これは特定の空のバイト文字列と区別できない可能性があります。代わりに、lastError ()をチェックして、エラーが発生したかどうかを判断する。

この関数は、整数や文字列からの型変換は行いません。したがって、この関数はisByteArray() が真である場合にのみ呼び出すことができる。

注意: この関数は再開できない。つまり、この関数は、例えばソケットやパイプからCBORデータをまだ受信している可能性があるコンテキストでは使用してはならない。全データが既に受信され、入力QByteArray またはQIODevice で利用可能な場合にのみ使用する必要があります。

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

readByteArray(),readStringChunk(),isByteArray(),readAllString()も参照

[since 6.7] QString QCborStreamReader::readAllString()

現在のテキスト文字列をデコードして返します。文字列がチャンク化されている場合、この関数はすべてのチャンクを繰り返し処理し、それらを連結します。エラーが発生した場合、この関数はデフォルトの QString() を返しますが、これは特定の空のテキスト文字列と区別できない可能性があります。代わりに、lastError() をチェックして、エラーが発生したかどうかを判断します。

この関数は、整数やバイト配列からの型変換は行いません。したがって、この関数を呼び出せるのは、isString ()がtrueを返した場合のみである。それ以外の場合に呼び出すとエラーとなる。

注意: この関数は再開できない。つまり、この関数は、例えばソケットやパイプからCBORデータをまだ受信している可能性があるコンテキストでは使用してはならない。全データが既に受信され、入力QByteArray またはQIODevice で利用可能な場合にのみ使用する必要があります。

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

readString(),readStringChunk(),isString(),readAllByteArray()も参照

[since 6.7] QByteArray QCborStreamReader::readAllUtf8String()

現在のテキスト文字列をデコードして返します。文字列がチャンク化されている場合、この関数はすべてのチャンクを繰り返し処理し、それらを連結します。エラーが発生した場合、この関数はデフォルトの QString() を返しますが、これは特定の空のテキスト文字列と区別できない可能性があります。代わりに、lastError() をチェックして、エラーが発生したかどうかを判断します。

この関数は、整数やバイト配列からの型変換は行いません。したがって、この関数を呼び出せるのは、isString ()がtrueを返した場合のみである。それ以外の場合に呼び出すとエラーとなる。

注意: この関数は再開できない。つまり、この関数は、例えばソケットやパイプからCBORデータをまだ受信している可能性があるコンテキストでは使用してはならない。全データが既に受信され、入力QByteArray またはQIODevice で利用可能な場合にのみ使用する必要があります。

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

readString(),readStringChunk(),isString(),readAllByteArray()も参照

[since 6.7] bool QCborStreamReader::readAndAppendToByteArray(QByteArray &dst)

現在のバイト文字列をデコードし、dst に追加します。 文字列がチャンク化されている場合、この関数はすべてのチャンクを繰り返し処理し、それらを連結します。デコード中にエラーが発生した場合、デコードに成功した他のチャンクがdst に書き込まれる可能性がある。エラーなしでデコードできた場合はtrue を返し、そうでない場合はfalse を返す。

この関数は、整数や文字列からの型変換は行わない。したがって、この関数はisByteArray() が真である場合にのみ呼び出すことができる。

注意: この関数は再開できない。つまり、この関数は、例えばソケットやパイプからCBORデータをまだ受信している可能性があるコンテキストでは使用してはならない。全データが既に受信され、入力QByteArray またはQIODevice で利用可能な場合にのみ使用する必要があります。

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

readByteArray(),readStringChunk(),isByteArray(),readAndAppendToString()も参照してください

[since 6.7] bool QCborStreamReader::readAndAppendToString(QString &dst)

現在のテキスト文字列をデコードし、dst に追加します。 文字列がチャンク化されている場合、この関数はすべてのチャンクを繰り返し処理し、それらを連結します。デコード中にエラーが発生した場合、デコードに成功した他のチャンクがdst に書き込まれる可能性がある。エラーなしでデコードできた場合はtrue を返し、そうでない場合はfalse を返す。

この関数は、整数やバイト配列からの型変換は行わない。したがって、この関数はisString() が真を返した場合にのみ呼び出すことができる。

注意: この関数は再開できない。つまり、この関数は、例えばソケットやパイプからCBORデータをまだ受信している可能性があるコンテキストでは使用してはならない。全データが既に受信され、入力QByteArray またはQIODevice で利用可能な場合にのみ使用する必要があります。

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

readString(),readStringChunk(),isString(),readAndAppendToByteArray()も参照してください

[since 6.7] bool QCborStreamReader::readAndAppendToUtf8String(QByteArray &dst)

現在のテキスト文字列をデコードし、dst に追加します。 文字列がチャンク化されている場合、この関数はすべてのチャンクを繰り返し処理し、それらを連結します。デコード中にエラーが発生した場合、デコードに成功した他のチャンクがdst に書き込まれる可能性がある。エラーなしでデコードできた場合はtrue を返し、そうでない場合はfalse を返す。

この関数は、整数やバイト配列からの型変換は行わない。したがって、この関数はisString() が真を返した場合にのみ呼び出すことができる。

注意: この関数は再開できない。つまり、この関数は、例えばソケットやパイプからCBORデータをまだ受信している可能性があるコンテキストでは使用してはならない。全データが既に受信され、入力QByteArray またはQIODevice で利用可能な場合にのみ使用する必要があります。

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

readString(),readStringChunk(),isString(),readAndAppendToByteArray()も参照

QCborStreamReader::StringResult<QByteArray> QCborStreamReader::readByteArray()

CBOR文字列から1バイトの配列チャンクをデコードして返します。この関数は通常のコンテンツとチャンクされたコンテンツの両方に使用されるため、isLengthKnown() が真であっても、呼び出し元は常にこの関数を呼び出してループしなければならない。この関数の典型的な使い方は以下の通りである:

   QBytearray decodeBytearray(QCborStreamReader &reader)
   {
       QBytearray result;
       auto r = reader.readBytearray();
       while (r.status == QCborStreamReader::Ok) {
           result += r.data;
           r = reader.readByteArray();
       }

       if (r.status == QCborStreamReader::Error) {
           // handle error condition
           result.clear();
       }
       return result;
   }

readAllByteArray() 関数は、上記のループといくつかの追加チェックを実装する。

この関数は、整数や文字列からの型変換は行いません。したがって、この関数はisByteArray() が真である場合にのみ呼び出すことができる。

readAllByteArray(),readString(),isByteArray(),readStringChunk()も参照のこと

QCborStreamReader::StringResult<QString> QCborStreamReader::readString()

CBOR文字列から1つの文字列チャンクをデコードして返す。この関数は、通常の文字列コンテンツとチャンクされた文字列コンテンツの両方に使用されるため、isLengthKnown() が真であっても、呼び出し元は常にこの関数を呼び出してループしなければならない。この関数の典型的な使い方は以下のとおりである:

   QString decodeString(QCborStreamReader &reader)
   {
       QString result;
       auto r = reader.readString();
       while (r.status == QCborStreamReader::Ok) {
           result += r.data;
           r = reader.readString();
       }

       if (r.status == QCborStreamReader::Error) {
           // handle error condition
           result.clear();
       }
       return result;
   }

readAllString() 関数は、上記のループといくつかの追加チェックを実装している。

この関数は、整数やバイト配列からの型変換は行いません。したがって、この関数はisString() が真を返した場合にのみ呼び出すことができる。

readAllString()、readByteArray()、isString()、readStringChunk()も参照のこと

QCborStreamReader::StringResult<qsizetype> QCborStreamReader::readStringChunk(char *ptr, qsizetype maxlen)

現在の文字列チャンクを、サイズがmaxlen であるptr が指すバッファに読み込みます。この関数はStringResult オブジェクトを返し、ptr にコピーされたバイト数は\l StringResult::data メンバに保存される。\l StringResult::status メンバは、文字列の読み取りにエラーがあったのか、データがコピーされたのか、これが最後のチャンクなのかを示します。

この関数は、String 型とByteArray 型の両方で呼び出すことができる。後者の場合、この関数はreadByteArray() が返したのと同じデータを読み込む。文字列の場合は、QString が返したものと同等の UTF-8 を返します。

この関数は通常、ループ内でcurrentStringChunkSize() と並んで使用される。例えば

    QCborStreamReader<qsizetype> result;
    do {
        qsizetype size = reader.currentStringChunkSize();
        qsizetype oldsize = buffer.size();
        buffer.resize(oldsize + size);
        result = reader.readStringChunk(buffer.data() + oldsize, size);
    } while (result.status() == QCborStreamReader::Ok);

readByteArray() やreadString() と異なり、この関数は、QByteArrayQString の実装制限に制限されることはない。

注意: この関数は、UTF-8コンテンツが適切にフォーマットされているかどうかの検証は行いません。つまり、この関数は、readString() でエラーが発生しても、QCborError::InvalidUtf8String エラーを発生させない。

currentStringChunkSize()、readString()、readByteArray()、isString()、isByteArray()も参照のこと

[since 6.7] QCborStreamReader::StringResult<QByteArray> QCborStreamReader::readUtf8String()

CBOR文字列から1つの文字列チャンクをデコードして返す。この関数は、通常の文字列コンテンツとチャンクされた文字列コンテンツの両方に使用されるため、呼び出し側は、isLengthKnown() が真であっても、常にこの関数を呼び出してループしなければならない。この関数の典型的な使用法は、以下のreadString ()と同様である:

   QString decodeString(QCborStreamReader &reader)
   {
       QString result;
       auto r = reader.readString();
       while (r.status == QCborStreamReader::Ok) {
           result += r.data;
           r = reader.readString();
       }

       if (r.status == QCborStreamReader::Error) {
           // handle error condition
           result.clear();
       }
       return result;
   }

readAllUtf8String() 関数は、上記のループといくつかの追加チェックを実装している。

この関数は、整数やバイト配列からの型変換は行いません。したがって、この関数はisString() が真を返した場合のみ呼び出すことができます。それ以外の条件で呼び出すとエラーになります。

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

readAllString(),readByteArray(),isString(),readStringChunk()も参照してください

void QCborStreamReader::reparse()

現在の要素を解析し直します。この関数は、CBORストリームの終了前に入力データの終わりに到達したために解析に失敗した後、ソースQIODevice で利用可能なデータが増えたときに呼び出されなければなりません。

QByteArray()から読み出すとき、addData()関数は自動的にこの関数を呼び出す。読み取りが失敗していないときにこの関数を呼び出すことは、ノー・オプションです。

void QCborStreamReader::reset()

ソースを最初にリセットし、デコーダの状態をクリアする。ソース・データがQByteArray であった場合、QCborStreamReader は配列の先頭からリスタートする。

ソース・データがQIODevice の場合、この関数はQIODevice::reset() を呼び出し、バイト位置 0 をシークする。CBOR ストリームがデバイスの先頭で見つからなかった場合(例えば、ファイルの先頭)、この関数は間違った処理を行う可能性が高い。代わりに、QIODevice を正しいオフセットに配置し、setDevice() を呼び出す。

clear() およびsetDevice()も参照の こと。

void QCborStreamReader::setDevice(QIODevice *device)

データ・ソースをdevice に設定し、デコーダを初期状態にリセットする。

device()も参照して ください。

bool QCborStreamReader::toBool() const

現在の要素の真偽値を返します。

この関数は、整数からの型変換を含め、いかなる型変換も行いません。したがって、isTrue()、isFalse()、isBool() が真を返した場合にのみ呼び出すことができる。それ以外の条件で呼び出すとエラーとなる。

isBool()、isTrue()、isFalse()、toInteger()も参照

double QCborStreamReader::toDouble() const

現在の要素の 64 ビット倍精度浮動小数点値を返します。

この関数は、他の浮動小数点型や整数値からの型変換は行いません。したがって、この関数はisDouble() が真である場合にのみ呼び出すことができます。

isDouble(),toFloat16(),toFloat()も参照

qfloat16 QCborStreamReader::toFloat16() const

現在の要素の 16 ビット半精度浮動小数点値を返します。

この関数は、他の浮動小数点型や整数値からの型変換は行いません。したがって、この関数は、isFloat16() が真である場合にのみ呼び出すことができます。それ以外の条件で呼び出すとエラーになります。

isFloat16(),toFloat(),toDouble()も参照

float QCborStreamReader::toFloat() const

現在の要素の 32 ビット単精度浮動小数点値を返します。

この関数は、他の浮動小数点型や整数値からの型変換は行いません。したがって、この関数を呼び出すことができるのは、isFloat() が真である場合だけです。

isFloat()、toFloat16()、toDouble()も参照

qint64 QCborStreamReader::toInteger() const

現在の要素の整数値(負、正、ゼロのいずれか)を返します。値が263- 1 より大きいか-263 より小さい場合、返される値はオーバーフローし、符号が不正確になります。これらの値の処理が必要な場合は、代わりにtoUnsignedInteger() またはtoNegativeInteger() を使用する。

この関数は、boolean や CBOR タグからの型変換を含め、いかなる型変換も行わない。したがって、この関数はisInteger() が真である場合にのみ呼び出すことができる。

isInteger(),toUnsignedInteger(),toNegativeInteger()も参照

QCborNegativeInteger QCborStreamReader::toNegativeInteger() const

現在の要素の負の整数値を返します。QCborNegativeValueは、CBORストリームに格納された負の数の絶対値を含む64ビットの符号なし整数です。さらに、QCborNegativeValue(0)は数値-264を表します。

この関数は、boolean または CBOR タグからの型変換を含め、いかなる型変換も行いません。従って、isNegativeInteger()がtrueの場合のみ呼び出すことができる。それ以外の条件で呼び出すとエラーとなる。

この関数は、toInteger ()の戻り値の型の範囲を超える数値を得るために使用で きる。ただし、-263 よりも小さい負数の使用は極端に推奨されない。

type()、toInteger()、isNegativeInteger()、isUnsignedInteger()も参照のこと

QCborSimpleType QCborStreamReader::toSimpleType() const

現在の単純型の値を返す。

この関数は、整数からの変換を含め、いかなる型変換も行わない。したがって、isSimpleType() が真である場合にのみ呼び出すことができます。それ以外の条件で呼び出すとエラーになります。

isSimpleType()、isTrue()、isFalse()、isBool()、isNull()、isUndefined()も参照

QCborTag QCborStreamReader::toTag() const

現在の要素のタグ値を返します。

この関数は、整数からの型変換を含め、いかなる型変換も行いません。したがって、isTag() が真である場合にのみ呼び出すことができます。それ以外の条件で呼び出すとエラーになります。

タグは、汎用のCBOR型に付加された64ビットの数値であり、それらに更なる意味を与える。既知のタグのリストについては、QCborKnownTags 列挙を参照のこと。

isTag()、toInteger()、QCborKnownTagsも参照のこと

quint64 QCborStreamReader::toUnsignedInteger() const

現在の要素の符号なし整数値を返す。

この関数は、boolean または CBOR タグからの型変換を含め、いかなる型変換も行いません。したがって、この関数はisUnsignedInteger() が真である場合にのみ呼び出すことができる。

この関数は、toInteger() の戻り値の型の範囲を超える数値を得るために使用できる。

type()、toInteger()、isUnsignedInteger()、isNegativeInteger()も参照

QCborStreamReader::Type QCborStreamReader::type() const

現在の要素の型を返します。有効な型のいずれか、または Invalid です。

isValid(),isUnsignedInteger(),isNegativeInteger(),isInteger(),isByteArray(),isString(),isArray(),isMap(),isTag(),isSimpleType(),isBool(),isFalse(),isTrue(),isNull(),isUndefined(),isFloat16(),isFloat(),isDouble()参照。

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