QCborStreamReader Class
QCborStreamReader クラスは、QByteArray またはQIODevice のいずれかを処理する、シンプルな CBOR ストリームデコーダです。詳細...
| ヘッダー: | #include <QCborStreamReader> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 継承されたメンバーを含むすべてのメンバーの一覧
- QCborStreamReader は、Qt の CBOR サポートの一部です。
注:このクラスのすべての関数は再入可能です。
パブリック型
| 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(const QCborStreamReader &) | |
| ~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 |
| QCborStreamReader & | operator=(const QCborStreamReader &) |
詳細な説明
このクラスは、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() を呼び出す必要があります。 |
| 文字列 | バイト配列、テキスト文字列 | 長さ(既知の場合)は事前に解析されますが、文字列自体は解析されません。アクセサ関数は const ではなく、メモリを割り当てる場合があります。呼び出されると、アクセサ関数は自動的に次の要素に進みます。 |
| コンテナ | 配列、マップ | 長さ(既知の場合)は事前に解析されます。要素にアクセスするには、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の機能の一覧です。
| 機能 | サポート |
|---|---|
| 符号なし数値 | はい(全範囲) |
| 負の数 | はい(全範囲) |
| バイト文字列 | はい |
| テキスト文字列 | はい |
| チャンク化された文字列 | はい |
| タグ | はい(任意) |
| ブール値 | はい |
| Null | はい |
| 未定義 | はい |
| 任意の単純な値 | はい |
| 半精度浮動小数点(16ビット) | はい |
| 単精度浮動小数点数 (32ビット) | はい |
| 倍精度浮動小数点(64ビット) | はい |
| 無限大およびNaNの浮動小数点値 | はい |
| 確定長配列およびマップ | はい |
| 不定長配列およびマップ | はい |
| 文字列および整数以外のマップキー型 | はい(任意) |
無効または不完全なCBORストリームの処理
QCborStreamReaderは、破損した入力を独自に検出することができます。このライブラリが使用するライブラリは、あらゆる種類の無効な入力に対して徹底的にテストされており、エラーを適切に報告することができます。エラーが検出された場合、QCborStreamReaderはlastError()をQCborError::NoError 以外の値に設定し、どのような状況が検出されたかを示します。
通常の項目解析中にQCborStreamReaderによって検出されるエラーのほとんどは、回復不可能です。QCborStreamReaderを使用するコードでは、正しくデコードされたデータを処理するか、データ全体を破棄するかを選択できます。
回復可能な唯一のエラーは `QCborError::EndOfFile` であり、これは解析を完了するためにさらにデータが必要であることを示します。この状況は、パイプ(`QProcess`)やソケット(`QTcpSocket`、`QUdpSocket`、`QNetworkReply` など)といった非同期ソースからデータを読み込む際に役立ちます。 さらにデータが到着した場合は、周囲のコードで、QByteArray から解析している場合はaddData()を、あるいは、データが追加されたQIDOeviceから直接読み込んでいる場合はreparse()を呼び出す必要があります(setDevice()を参照)。
QCborStreamWriter 、QCborValue 、QXmlStreamReader 、CBORデータの解析と表示、シリアライゼーションコンバータ、およびゲームの保存と読み込みも参照してください 。
メンバ型のドキュメント
enum QCborStreamReader::StringResultCode
この列挙型は、readString() およびreadByteArray() によって返され、構文解析のステータスを示すために使用されます。
| 定数 | 定数値 | 説明値 |
|---|---|---|
QCborStreamReader::EndOfString | 0 | 文字列の解析が完了し、エラーはありませんでした。 |
QCborStreamReader::Ok | 1 | 関数がデータを返しました。エラーは発生しませんでした。 |
QCborStreamReader::Error | -1 | 解析中にエラーが発生し、失敗しました。 |
enum QCborStreamReader::Type
この列挙型には、QCborStreamReader によってデコードされた、すべての可能なCBOR型が含まれています。CBORには7つの主要な型に加え、値を保持しないいくつかの単純型、および浮動小数点値があります。
| 定数 | 値 | 説明 |
|---|---|---|
QCborStreamReader::UnsignedInteger | 0x00 | (主要型 0) 0 から264- 1 (18,446,744,073,709,551,616) までの範囲 |
QCborStreamReader::NegativeInteger | 0x20 | (主要型 1) -1 から-264(-18,446,744,073,709,551,616) までの範囲 |
QCborStreamReader::ByteArray | ByteString | (メジャー型 2) 任意のバイナリデータ。 |
QCborStreamReader::ByteString | 0x40 | ByteArray の別名。 |
QCborStreamReader::String | TextString | (メジャータイプ 3) NUL を含む可能性のある Unicode テキスト。 |
QCborStreamReader::TextString | 0x60 | String の別名 |
QCborStreamReader::Array | 0x80 | (メジャー型 4) 異種項目の配列。 |
QCborStreamReader::Map | 0xa0 | (メジャー型 5) 異種項目のマップ/ディクショナリ。 |
QCborStreamReader::Tag | 0xc0 | (メジャー型 6) 汎用 CBOR 項目にさらなる意味的価値を与える数値。詳細については、QCborTag を参照してください。 |
QCborStreamReader::SimpleType | 0xe0 | (メジャー型 7) それ以上の値を持たない型。ブール値 (true および false)、null、undefined が含まれます。 |
QCborStreamReader::Float16 | HalfFloat | IEEE 754 半精度浮動小数点 (qfloat16)。 |
QCborStreamReader::HalfFloat | 0xf9 | Float16の別名。 |
QCborStreamReader::Float | 0xfa | IEEE 754 単精度浮動小数点 (float)。 |
QCborStreamReader::Double | 0xfb | IEEE 754 倍精度浮動小数点 (double)。 |
QCborStreamReader::Invalid | 0xff | 構文解析エラー、または配列やマップの末尾に達したため、有効な型ではありません。 |
メンバ関数のドキュメント
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 が破棄されるまで有効なままである必要があります。
これはオーバーロードされた関数です。
[delete] QCborStreamReader::QCborStreamReader(const 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()がtrueである場合)にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
leaveContainer()、isContainer()、isArray()、およびisMap()も参照してください 。
[noexcept] bool QCborStreamReader::hasNext() const
現在のコンテナ内にデコードすべき項目がまだ残っている場合は true を返し、末尾に達した場合は false を返します。ルート要素を解析している場合、hasNext() が false を返すと解析が完了したことを示します。それ以外の場合、コンテナの深さが 0 以外であれば、外側のコードでleaveContainer() を呼び出す必要があります。
parentContainerType()、containerDepth()、およびleaveContainer()も参照してください 。
bool QCborStreamReader::isArray() const
現在の要素の型が配列である場合(つまり、type() がQCborStreamReader::Array を返す場合)、true を返します。この関数が true を返す場合、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();
return list;
}注:上記のコードでは 、長さが妥当な値であるかどうかの検証は行われていません。入力ストリームが長さを10億要素と報告した場合、上記の関数は16 GB以上のRAMを割り当てようとし、クラッシュの原因となる可能性があります。
type()、isMap()、isLengthKnown()、length()、enterContainer()、およびleaveContainer()も参照してください 。
bool QCborStreamReader::isBool() const
現在の要素がブール値(true またはfalse )である場合は true を返し、それ以外の場合は false を返します。この関数が true を返した場合、toBool() を呼び出してブール値を取得できます。また、toSimpleType() を呼び出し、QCborSimpleValue::True または QCborSimpleValue::False と比較することもできます。
関連項目: type()、isFalse()、isTrue()、toBool()、isSimpleType()、およびtoSimpleType()。
bool QCborStreamReader::isByteArray() const
現在の要素の型がバイト配列である場合(つまり、type() がQCborStreamReader::ByteArray を返す場合)、true を返します。この関数が 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倍精度浮動小数点型である場合(つまり、type()がQCborStreamReader::Double を返す場合)、trueを返します。この関数がtrueを返す場合、toDouble()を呼び出してそのデータを読み取ることができます。
type()、toDouble()、isFloat16()、およびisFloat()も参照してください 。
bool QCborStreamReader::isFalse() const
現在の要素がfalse の値である場合はtrueを返し、それ以外の場合はfalseを返します。
関連項目: type()、isTrue()、isBool()、toBool()、isSimpleType()、およびtoSimpleType()。
bool QCborStreamReader::isFloat16() const
現在の要素の型がIEEE 754半精度浮動小数点数である場合(つまり、type()がQCborStreamReader::Float16 を返す場合)、trueを返します。この関数がtrueを返した場合、toFloat16()を呼び出してそのデータを読み取ることができます。
type()、toFloat16()、isFloat()、およびisDouble()も参照してください 。
bool QCborStreamReader::isFloat() const
現在の要素の型がIEEE 754単精度浮動小数点型である場合(つまり、type()がQCborStreamReader::Float を返す場合)、trueを返します。この関数がtrueを返す場合、toFloat()を呼び出してそのデータを読み取ることができます。
type()、toFloat()、isFloat16()、およびisDouble()も参照してください 。
bool QCborStreamReader::isInteger() const
現在の要素の型が符号なし整数または負の整数である場合(つまり、type() がQCborStreamReader::UnsignedInteger またはQCborStreamReader::NegativeInteger を返す場合)、true を返します。この関数が true を返す場合、toInteger() を呼び出してその値を読み取ることができます。
関連項目: type()、toInteger()、toUnsignedInteger()、toNegativeInteger()、isUnsignedInteger()、およびisNegativeInteger()。
bool QCborStreamReader::isInvalid() const
現在の要素が無効な場合は true を返し、それ以外の場合は false を返します。デコードエラーが発生した場合、または配列やマップの最後の要素を解析した直後の場合、現在の要素は無効となる可能性があります。
注:この関数は 、isNull() と混同しないでください。null は通常の CBOR 型であり、アプリケーション側で適切に処理する必要があります。
[noexcept] bool QCborStreamReader::isLengthKnown() const
現在の配列、マップ、バイト配列、または文字列の長さが判明している場合(CBORストリーム内で明示されている場合)、trueを返します。それ以外の場合はfalseを返します。この関数は、要素がこれらいずれかである場合にのみ呼び出す必要があります。
長さが判明している場合は、length() を呼び出すことで取得できます。
マップや配列の長さが不明な場合、その長さはストリーム内に存在する要素数によって暗黙的に決定されます。QCborStreamReader には、その状況で長さを計算するための API は用意されていません。
文字列やバイト配列も、長さが不定である場合があります(つまり、複数のチャンクに分けて送信される可能性があります)。これらは現在、QCborStreamWriter では作成できませんが、他のエンコーダでは作成できる可能性があるため、QCborStreamReader はそれらをサポートしています。
length()、QCborStreamWriter::startArray()、およびQCborStreamWriter::startMap()も参照してください 。
bool QCborStreamReader::isMap() const
現在の要素の型がマップである場合(つまり、type() がQCborStreamReader::Map を返す場合)、true を返します。この関数が true を返す場合、enterContainer() を呼び出して、そのコンテナの解析を開始することができます。
現在の要素がマップである場合、isLengthKnown() を呼び出して、そのマップのサイズが CBOR ストリーム内で明示されているかどうかを確認することもできます。明示されている場合、length() を呼び出すことでそのサイズを取得できます。
次の例では、より効率的なデコードを行うために、マップのサイズに基づいて `QVariantMap ` を事前に割り当てています:
QVariantMap populateFromCbor(QCborStreamReader &reader)
{
QVariantMap map;
if (reader.isLengthKnown())
map = setMapLength(map, 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();
return map;
}上記の例では、readElementAsString という関数を使用してマップのキーを読み取り、文字列を取得しています。これは、CBOR マップのキーには文字列だけでなく、あらゆる型が含まれる可能性があるためです。 ユーザーコードでは、この変換を行うか、文字列以外のキーを拒否するか、あるいはQVariantMap やQVariantHash 以外のコンテナを使用する必要があります。例えば、マップに整数のキーが含まれることが予想される場合(ストリームのサイズと解析負荷を軽減できるため推奨されます)、適切なコンテナは\l{QMap}<int, QVariant> または\l{QHash}<int, QVariant> となります。
注:上記のコードでは 、長さが妥当な値であるかどうかを検証していません。入力ストリームが長さを 10 億要素と報告した場合、上記の関数は 24 GB 以上の RAM を割り当てようとし、クラッシュの原因となる可能性があります。
関連項目: type()、isArray()、isLengthKnown()、length()、enterContainer()、およびleaveContainer()。
bool QCborStreamReader::isNegativeInteger() const
現在の要素の型が負の整数である場合(つまり、type() がQCborStreamReader::NegativeInteger を返す場合)、true を返します。この関数が true を返す場合、toNegativeInteger() またはtoInteger() を呼び出してその値を読み取ることができます。
type()、toNegativeInteger()、toInteger()、isInteger()、およびisUnsignedInteger()も参照してください 。
bool QCborStreamReader::isNull() const
現在の要素がnull の値である場合はtrueを返し、それ以外の場合はfalseを返します。Null値は、一部のオプションデータの欠如を示すために使用されることがあります。
注:この関数は 、isValid() の逆の動作をするものではありません。Null 値は有効な CBOR 値です。
関連項目: type()、isSimpleType()、およびtoSimpleType()。
bool QCborStreamReader::isSimpleType() const
現在の要素の型が、ブール値(true および false)や null、undefined を含む任意の CBOR 単純型である場合に true を返します。これがどの単純型であるかを確認するには、toSimpleType() を呼び出します。あるいは、特定の単純型を検査するには、QCborSimpleType パラメータを取るオーバーロードを呼び出してください。
CBOR単純型とは、余分な値を持たない型のことです。255通りの可能性があります が、現在、定義された意味を持つ値は4つだけです。コードは未知の単純型に対処することを想定しておらず、未知の型が見つかった場合は、そのストリームを無効として単に破棄してもかまいません。
関連項目: QCborSimpleType 、type()、isSimpleType(QCborSimpleType)、およびtoSimpleType()。
bool QCborStreamReader::isSimpleType(QCborSimpleType st) const
現在の要素の型が単純型st である場合はtrueを返し、そうでない場合はfalseを返します。この関数がtrueを返した場合、toSimpleType()はst を返します。
CBORの単純型とは、余分な値を持たない型のことです。255通りの可能性があります が、現在、定義された意味を持つ値は4つしかありません。コードは未知の単純型に対処することを想定しておらず、未知の型が見つかった場合は、そのストリームを無効として破棄する可能性があります。
QCborSimpleType 、type()、isSimpleType()、およびtoSimpleType()も参照してください 。
bool QCborStreamReader::isString() const
現在の要素の型がテキスト文字列である場合(つまり、type() がQCborStreamReader::String を返す場合)、true を返します。この関数が true を返す場合、readString() を呼び出してそのデータを読み取ることができます。
type()、readString()、およびisByteArray()も参照してください 。
bool QCborStreamReader::isTag() const
現在の要素の型がCBORタグである場合(つまり、type()がQCborStreamReader::Tag を返す場合)、trueを返します。この関数がtrueを返す場合、toTag()を呼び出してそのデータを読み取ることができます。
bool QCborStreamReader::isTrue() const
現在の要素がtrue の値である場合はtrueを返し、それ以外の場合はfalseを返します。
関連項目: type()、isFalse()、isBool()、toBool()、isSimpleType()、toSimpleType()も参照してください 。
bool QCborStreamReader::isUndefined() const
現在の要素がundefined の値である場合はtrueを返し、それ以外の場合はfalseを返します。未定義の値は、ストリームの作成時に何らかの変換が失敗したか、または変換が不可能であったことを示すためにエンコードされている場合があります。QCborStreamReader は決して置換を行わないため、この関数はストリームに明示的な未定義の値が含まれている場合にのみtrueを返します。
type()、isSimpleType()、およびtoSimpleType()も参照してください 。
bool QCborStreamReader::isUnsignedInteger() const
現在の要素の型が符号なし整数である場合(つまり、type() がQCborStreamReader::UnsignedInteger を返す場合)、true を返します。この関数が true を返す場合、toUnsignedInteger() またはtoInteger() を呼び出してその値を読み取ることができます。
type()、toUnsignedInteger()、toInteger()、isInteger()、およびisNegativeInteger()も参照してください 。
bool QCborStreamReader::isValid() const
現在の要素が有効な場合は true を返し、そうでない場合は false を返します。デコードエラーが発生した場合、または配列やマップの最後の要素を解析した直後の場合、現在の要素は無効となる可能性があります。
注:この関数は 、isNull() の逆の動作をするものではありません。null は通常の CBOR 型であり、アプリケーション側で適切に処理する必要があります。
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() が false を返した場合)、この関数を呼び出してはなりません。 そうするとエラーとなり、QCborStreamReader が入力ストリームの解析を停止します。
isLengthKnown()、QCborStreamWriter::startArray()、およびQCborStreamWriter::startMap()も参照してください 。
bool QCborStreamReader::next(int maxRecursion = 10000)
CBORストリームのデコードを1要素分進めます。通常、この関数は固定幅の基本要素(つまり、整数、単純値、タグ、浮動小数点値)を解析する際に呼び出す必要があります。ただし、現在の項目が文字列、配列、またはマップである場合にもこの関数を呼び出すことができ、その場合、含まれるすべての要素を含め、その要素全体をスキップします。
この関数は、進め処理が成功した場合は true を返し、そうでない場合は false を返します。ストリームが破損している、不完全である、または配列やマップのネストレベルがmaxRecursion を超える場合、失敗する可能性があります。また、hasNext() が false を返した状態でこの関数を呼び出すこともエラーとなります。この関数が 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() が true の場合にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
注:この関数は 再開できません。つまり、ソケットやパイプなどから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() が true の場合にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
注:この関数は 再開できません。つまり、ソケットやパイプなどからCBORデータがまだ受信される可能性があるコンテキストでは、この関数を使用しないでください。この関数は、データがすべて受信済みであり、入力変数QByteArray またはQIODevice で利用可能な場合にのみ使用してください。
この関数は Qt 6.7 で導入されました。
readByteArray()、readStringChunk()、isByteArray()、およびreadAndAppendToString()も参照してください 。
[since 6.7] bool QCborStreamReader::readAndAppendToString(QString &dst)
現在のテキスト文字列をデコードし、dst に追加します。文字列がチャンク化されている場合、この関数はすべてのチャンクを順に処理して連結します。デコード中にエラーが発生した場合でも、正常にデコードできた他のチャンクがdst に書き込まれている可能性があります。デコードがエラーなく完了した場合はtrue を返し、それ以外の場合はfalse を返します。
この関数は、整数やバイト配列からの変換を含め、いかなる型変換も行いません。したがって、isString() が true を返した場合にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
注:この関数は 再開できません。つまり、ソケットやパイプなどからCBORデータがまだ受信される可能性があるコンテキストでは、この関数を使用してはなりません。この関数は、データがすべて受信済みであり、入力パラメータQByteArray またはQIODevice にデータが利用可能な場合にのみ使用してください。
この関数は Qt 6.7 で導入されました。
readString()、readStringChunk()、isString()、およびreadAndAppendToByteArray()も参照してください 。
[since 6.7] bool QCborStreamReader::readAndAppendToUtf8String(QByteArray &dst)
現在のテキスト文字列をデコードし、dst に追加します。文字列がチャンク化されている場合、この関数はすべてのチャンクを順に処理して連結します。デコード中にエラーが発生した場合でも、正常にデコードできた他のチャンクがdst に書き込まれている可能性があります。デコードがエラーなく完了した場合はtrue を返し、それ以外の場合はfalse を返します。
この関数は、整数やバイト配列からの変換を含め、いかなる型変換も行いません。したがって、isString() が true を返した場合にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
注:この関数は 再開できません。つまり、ソケットやパイプなどからCBORデータがまだ受信される可能性があるコンテキストでは、この関数を使用すべきではありません。この関数は、データがすべて受信済みであり、入力パラメータQByteArray またはQIODevice で利用可能な場合にのみ使用してください。
この関数は Qt 6.7 で導入されました。
readString()、readStringChunk()、isString()、およびreadAndAppendToByteArray()も参照してください 。
QCborStreamReader::StringResult<QByteArray> QCborStreamReader::readByteArray()
CBOR文字列から1バイトの配列チャンクをデコードして返します。この関数は通常のコンテンツとチャンク化されたコンテンツの両方に使用されるため、呼び出し元は、isLengthKnown()がtrueの場合であっても、常にループを回してこの関数を呼び出す必要があります。この関数の一般的な使用例は以下の通りです:
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()がtrueの場合にのみ呼び出すことができます。それ以外の条件下で呼び出すとエラーとなります。
readAllByteArray()、readString()、isByteArray()、およびreadStringChunk()も参照してください 。
QCborStreamReader::StringResult<QString> QCborStreamReader::readString()
CBOR文字列から1つの文字列チャンクをデコードして返します。この関数は、通常の文字列コンテンツとチャンク化された文字列コンテンツの両方に使用されるため、呼び出し元は、isLengthKnown() が true の場合でも、常にループを回してこの関数を呼び出す必要があります。この関数の一般的な使用例は以下の通りです:
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()がtrueを返した場合にのみ呼び出すことができ、それ以外の状況で呼び出すとエラーとなります。
readAllString()、readByteArray()、isString()、およびreadStringChunk()も参照してください 。
QCborStreamReader::StringResult<qsizetype> QCborStreamReader::readStringChunk(char *ptr, qsizetype maxlen)
現在の文字列チャンクを、ptr が指すバッファ(サイズはmaxlen )に読み込みます。この関数はStringResult オブジェクトを返し、ptr にコピーされたバイト数は\l のStringResult::data メンバーに格納されます。\l のStringResult::status メンバーは、文字列の読み取り中にエラーが発生したか、データがコピーされたか、あるいはこれが最後のチャンクであったかを示します。
この関数は、String 型とByteArray 型の両方で呼び出すことができます。後者の場合、この関数はreadByteArray()が返したであろうのと同じデータを読み取ります。文字列の場合、この関数は、QString が返したであろう値のUTF-8相当値を返します。
この関数は通常、ループ内でcurrentStringChunkSize() と組み合わせて使用されます。例:
QCborStreamReader::StringResult<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() とは異なり、この関数はQByteArray およびQString の実装上の制限を受けません。
注:この関数は 、UTF-8 コンテンツが適切にフォーマットされているかどうかの検証を行いません。つまり、readString() がエラーを発生させる場合でも、この関数はQCborError::InvalidUtf8String エラーを発生させません。
currentStringChunkSize()、readString()、readByteArray()、isString()、およびisByteArray()も参照してください 。
[since 6.7] QCborStreamReader::StringResult<QByteArray> QCborStreamReader::readUtf8String()
CBOR文字列から1つの文字列チャンクをデコードして返します。この関数は、通常の文字列コンテンツとチャンク化された文字列コンテンツの両方に使用されるため、呼び出し元は、isLengthKnown()がtrueの場合であっても、常にこの関数をループ処理して呼び出す必要があります。この関数の典型的な使用法は、以下の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() が true を返した場合にのみ呼び出すことができ、それ以外の状況で呼び出すとエラーとなります。
この関数は 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()がtrueを返した場合にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
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()` を使用してください。
この関数は、ブール値やCBORタグからの変換を含め、いかなる型変換も行いません。したがって、isInteger()がtrueの場合にのみ呼び出すことができます。それ以外の条件下で呼び出すとエラーとなります。
isInteger()、toUnsignedInteger()、およびtoNegativeInteger()も参照してください 。
QCborNegativeInteger QCborStreamReader::toNegativeInteger() const
現在の要素の負の整数値を返します。QCborNegativeValue は、CBOR ストリームに格納されていた負の数の絶対値を含む 64 ビットの符号なし整数です。なお、QCborNegativeValue(0) は-264 を表します。
この関数は、ブール値や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() が true の場合にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
タグとは、汎用 CBOR 型に付加され、それらにさらなる意味を与える 64 ビットの数値です。既知のタグの一覧については、QCborKnownTags 列挙型を参照してください。
isTag()、toInteger()、およびQCborKnownTagsも参照してください 。
quint64 QCborStreamReader::toUnsignedInteger() const
現在の要素の符号なし整数値を返します。
この関数は、ブール値やCBORタグからの変換を含め、いかなる型変換も行いません。したがって、isUnsignedInteger()がtrueの場合にのみ呼び出すことができます。それ以外の状況で呼び出すとエラーとなります。
この関数は、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()。
[delete] QCborStreamReader &QCborStreamReader::operator=(const QCborStreamReader &)
other をこのQCborStreamReader インスタンスにコピーして代入します。この関数は削除されます。
© 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.