PySide6.QtCore.QCborStreamReader¶
- class QCborStreamReader¶
QCborStreamReader
类是一个简单的CBOR流解码器,可以在QByteArray
或QIODevice
上操作。更多…概要¶
方法¶
def
__init__()
def
addData()
def
clear()
def
containerDepth()
def
currentOffset()
def
device()
def
enterContainer()
def
hasNext()
def
isArray()
def
isBool()
def
isByteArray()
def
isContainer()
def
isDouble()
def
isFalse()
def
isFloat()
def
isFloat16()
def
isInteger()
def
isInvalid()
def
isLengthKnown()
def
isMap()
def
isNull()
def
isSimpleType()
def
isString()
def
isTag()
def
isTrue()
def
isUndefined()
def
isValid()
def
lastError()
def
leaveContainer()
def
length()
def
next()
def
readAllString()
def
readByteArray()
def
readString()
def
readUtf8String()
def
reparse()
def
reset()
def
setDevice()
def
toBool()
def
toDouble()
def
toFloat()
def
toInteger()
def
toSimpleType()
def
toTag()
def
type()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
该类可用于直接从
QByteArray
或QIODevice
解码CBOR内容流。CBOR是简洁二进制对象表示法,是一种非常紧凑的二进制数据编码形式,与JSON兼容。它由IETF受限RESTful环境(CoRE)工作组创建,并在许多新的RFC中使用。它旨在与CoAP协议一起使用。QCborStreamReader
提供了一个类似于StAX的API,类似于QXmlStreamReader
。使用它需要一些CBOR编码的知识。对于更简单的API,请参见QCborValue
,特别是解码函数fromCbor()
。通常,通过将源
QByteArray
或QIODevice
作为参数传递给构造函数来创建QCborStreamReader
,然后在解码没有错误的情况下从流中弹出元素。CBOR类型有三种:种类
类型
行为
固定宽度
整数、标签、简单类型、浮点数
值由
QCborStreamReader
预解析,因此访问函数是const
。必须调用next()
来前进。字符串
字节数组,文本字符串
如果已知长度,则预先解析,但字符串本身不解析。访问器函数不是常量,可能会分配内存。一旦调用,访问器函数会自动前进到下一个元素。
容器
数组, 映射
如果已知长度,则预先解析。要访问元素,必须调用
enterContainer()
,读取所有元素,然后调用leaveContainer()
。该函数会前进到下一个元素。所以一个处理器函数通常看起来像这样:
def handleStream(reader): switch (reader.type()) elif currentMode == QCborStreamReader.UnsignedInteger: elif currentMode == QCborStreamReader.NegativeInteger: elif currentMode == QCborStreamReader.SimpleType: elif currentMode == QCborStreamReader.Float16: elif currentMode == QCborStreamReader.Float: elif currentMode == QCborStreamReader.Double: handleFixedWidth(reader) reader.next() break elif currentMode == QCborStreamReader.ByteArray: elif currentMode == QCborStreamReader.String: handleString(reader) break elif currentMode == QCborStreamReader.Array: elif currentMode == 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
会将lastError()
设置为除NoError
之外的值,指示检测到的情况。在正常项目解析期间,由
QCborStreamReader
检测到的大多数错误是不可恢复的。使用QCborStreamReader
的代码可以选择处理已正确解码的数据,也可以选择丢弃整个数据。唯一可恢复的错误是
EndOfFile
,这表明需要更多数据才能完成解析。这种情况在从异步源(如管道(QProcess
)或套接字(QTcpSocket、QUdpSocket、QNetworkReply等))读取数据时非常有用。当更多数据到达时,周围的代码需要调用addData()
(如果从QByteArray
解析)或reparse()
(如果它直接读取现在有更多数据可用的QIDOevice(请参阅setDevice()
))。另请参阅
QCborStreamWriter
QCborValue
QXmlStreamReader
解析和显示CBOR数据 序列化转换器 保存和加载游戏- class Type¶
此枚举包含由
QCborStreamReader
解码的所有可能的CBOR类型。CBOR有7种主要类型,加上一些不携带值的简单类型,以及浮点数值。常量
描述
QCborStreamReader.UnsignedInteger
(主类型 0) 范围从 0 到 2 64 - 1 (18,446,744,073,709,551,616)
QCborStreamReader.NegativeInteger
(主要类型 1) 范围从 -1 到 -2 64 (-18,446,744,073,709,551,616)
QCborStreamReader.ByteArray
(主类型 2)任意二进制数据。
QCborStreamReader.ByteString
ByteArray的别名。
QCborStreamReader.String
(主要类型 3) Unicode 文本,可能包含 NULs。
QCborStreamReader.TextString
String的别名
QCborStreamReader.Array
(主要类型4)异构项目的数组。
QCborStreamReader.Map
(主要类型 5) 异构项目的映射/字典。
QCborStreamReader.Tag
(主要类型 6) 为通用CBOR项目提供进一步语义值的数字。有关更多信息,请参见
QCborTag
。QCborStreamReader.SimpleType
(主要类型7)不携带进一步值的类型。包括布尔值(真和假)、空、未定义。
QCborStreamReader.Float16
IEEE 754 半精度浮点数 (
qfloat16
)。QCborStreamReader.HalfFloat
Float16的别名。
QCborStreamReader.Float
IEEE 754 单精度浮点数 (
float
)。QCborStreamReader.Double
IEEE 754 双精度浮点数 (
double
)。QCborStreamReader.Invalid
不是一个有效的类型,可能是由于解析错误或到达数组或映射的末尾。
- class StringResultCode¶
此枚举由
readString()
和readByteArray()
返回,用于指示解析的状态。常量
描述
QCborStreamReader.EndOfString
字符串的解析已完成,没有错误。
QCborStreamReader.Ok
函数返回了数据;没有错误。
QCborStreamReader.Error
解析失败并出现错误。
- __init__()¶
创建一个没有源数据的
QCborStreamReader
对象。构造后,QCborStreamReader
将报告解析错误。您可以通过调用
addData()
或使用setDevice()
设置不同的源设备来添加更多数据。- __init__(device)
- Parameters:
设备 –
QIODevice
这是一个重载函数。
创建一个
QCborStreamReader
对象,该对象将解析从device
读取的CBOR流。QCborStreamReader
不拥有device
的所有权,因此在该对象销毁之前,device
必须保持有效。- __init__(data)
- Parameters:
数据 –
QByteArray
这是一个重载函数。
创建一个
QCborStreamReader
对象,该对象将解析在data
中找到的CBOR流。- __init__(data, len)
- Parameters:
data – 字符串
len – int
这是一个重载函数。
创建一个
QCborStreamReader
对象,该对象包含从data
开始的len
字节数据。指针必须保持有效,直到QCborStreamReader
被销毁。- __init__(data, len)
- Parameters:
data –
quint8
len – int
这是一个重载函数。
创建一个带有从
data
开始的len
字节数据的QCborStreamReader
对象。指针必须在QCborStreamReader
销毁之前保持有效。- addData(data)¶
- Parameters:
数据 –
QByteArray
将
data
添加到CBOR流中并重新解析当前元素。如果在处理流时之前已经到达数据的末尾,但现在有更多数据可用,此函数非常有用。- addData(data, len)
- Parameters:
data – 字符串
len – int
这是一个重载函数。
将起始于
data
的len
字节数据添加到CBOR流中,并重新解析当前元素。如果在处理流时先前已达到数据末尾,但现在有更多数据可用,此函数非常有用。- addData(data, len)
- Parameters:
data –
quint8
len – int
这是一个重载函数。
将起始于
data
的len
字节数据添加到CBOR流中,并重新解析当前元素。如果在处理流时先前已达到数据末尾,但现在有更多数据可用,此函数非常有用。- clear()¶
清除解码器状态并将输入源数据重置为空字节数组。调用此函数后,
QCborStreamReader
将指示解析错误。调用
addData()
来添加更多需要解析的数据。另请参阅
- containerDepth()¶
- Return type:
整数
返回此流已进入但尚未离开的容器数量,使用
enterContainer()
。- currentOffset()¶
- Return type:
整数
返回当前正在解码的项在输入流中的偏移量。当前偏移量是到目前为止解码的字节数,仅当源数据是
QByteArray
或解码开始时位于其开头的QIODevice
时。- currentStringChunkSize()¶
- Return type:
整数
返回当前文本或字节字符串块的大小。如果CBOR流包含非分块字符串(即如果
isLengthKnown()
返回true
),此函数将返回整个字符串的大小,与length()
相同。此函数对于预分配缓冲区非常有用,其指针稍后可以传递给
readStringChunk()
。另请参阅
readString()
readByteArray()
readStringChunk()
返回通过
setDevice()
或QCborStreamReader
构造函数设置的QIODevice
。如果此对象是从QByteArray
读取的,则此函数返回nullptr。另请参阅
- enterContainer()¶
- Return type:
布尔
进入作为当前项的数组或映射,并准备迭代容器中包含的元素。如果成功进入容器,则返回true,否则返回false(通常是解析错误)。每次调用enterContainer()必须与调用
leaveContainer()
配对。只有在当前项是数组或映射时(即如果
isArray()
、isMap()
或isContainer()
为真时),才能调用此函数。在任何其他条件下调用它都是错误的。- hasNext()¶
- Return type:
布尔
如果当前容器中还有更多项目需要解码,则返回true;如果已达到容器末尾,则返回false。如果我们正在解析根元素,hasNext()返回false表示解析完成;否则,如果容器深度不为零,则外部代码需要调用
leaveContainer()
。- isArray()¶
- Return type:
布尔
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
如果当前元素的类型是数组(即如果
type()
返回Array
),则返回true。如果此函数返回true,您可以调用enterContainer()
开始解析该容器。当当前元素是一个数组时,你也可以调用
isLengthKnown()
来查看数组的大小是否在CBOR流中明确。如果是,可以通过调用length()
来获取该大小。以下示例预先分配了一个QVariantList,给定数组的大小以提高解码效率:
def populateFromCbor(reader): list = QVariantList() if reader.isLengthKnown(): list.reserve(reader.length()) reader.enterContainer() while reader.lastError() == QCborError.NoError and reader.hasNext(): list.append(readOneElement(reader)) if reader.lastError() == QCborError.NoError: reader.leaveContainer()
注意
上面的代码没有验证长度是否是一个合理的值。如果输入流报告长度是10亿个元素,上面的函数将尝试分配大约16 GB或更多的RAM,这可能导致崩溃。
- isBool()¶
- Return type:
布尔
如果当前元素是布尔值(
true
或false
),则返回 true,否则返回 false。如果此函数返回 true,您可以调用toBool()
来获取布尔值。您还可以调用toSimpleType()
并与 QCborSimpleValue::True 或 QCborSimpleValue::False 进行比较。- isByteArray()¶
- Return type:
布尔
如果当前元素的类型是字节数组(即如果
type()
返回ByteArray
),则返回true。如果此函数返回true,您可以调用readByteArray()
来读取该数据。- isContainer()¶
- Return type:
布尔
如果当前元素是一个容器(即数组或映射),则返回true,否则返回false。如果当前元素是容器,则可以使用
isLengthKnown()
函数来确定容器的大小是否在流中明确,如果是,则可以使用length()
来获取该大小。更重要的是,对于一个容器,可以使用
enterContainer()
函数开始遍历其中包含的元素。- isDouble()¶
- Return type:
布尔
如果当前元素的类型是IEEE 754双精度浮点数(即,如果
type()
返回Double
),则返回true。如果此函数返回true,您可以调用toDouble()
来读取该数据。- isFalse()¶
- Return type:
布尔
如果当前元素是
false
值,则返回true,否则返回false。- isFloat()¶
- Return type:
布尔
如果当前元素的类型是IEEE 754单精度浮点数(即,如果
type()
返回Float
),则返回true。如果此函数返回true,您可以调用toFloat()
来读取该数据。- isFloat16()¶
- Return type:
布尔
如果当前元素的类型是IEEE 754半精度浮点数(即如果
type()
返回Float16
),则返回true。如果此函数返回true,您可以调用toFloat16()
来读取该数据。另请参阅
type()
toFloat16()
isFloat()
isDouble()
- isInteger()¶
- Return type:
布尔
如果当前元素的类型是无符号整数或负整数(即,如果
type()
返回UnsignedInteger
或NegativeInteger
),则返回true。如果此函数返回true,您可以调用toInteger()
来读取该值。另请参阅
type()
toInteger()
toUnsignedInteger()
toNegativeInteger()
isUnsignedInteger()
isNegativeInteger()
- isInvalid()¶
- Return type:
布尔
如果当前元素无效,则返回true,否则返回false。如果存在解码错误或者我们刚刚解析了数组或映射中的最后一个元素,当前元素可能无效。
- isLengthKnown()¶
- Return type:
布尔
如果当前数组、映射、字节数组或字符串的长度已知(在CBOR流中明确),则返回true,否则返回false。只有在元素是其中之一时才应调用此函数。
如果长度已知,可以通过调用
length()
来获取。如果映射或数组的长度未知,则通过流中存在的元素数量来暗示。
QCborStreamReader
没有API来计算这种情况下的长度。字符串和字节数组也可能具有不确定的长度(即,它们可能以多个块传输)。这些目前无法使用
QCborStreamWriter
创建,但可以使用其他编码器创建,因此QCborStreamReader
支持它们。- isMap()¶
- Return type:
布尔
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
如果当前元素的类型是映射(即如果
type()
返回Map
),则返回true。如果此函数返回true,您可以调用enterContainer()
开始解析该容器。当当前元素是一个映射时,您还可以调用
isLengthKnown()
来查找映射的大小是否在CBOR流中明确。如果是,可以通过调用length()
来获取该大小。以下示例预先分配了一个QVariantMap,给定映射的大小以提高解码效率:
def populateFromCbor(reader): map = QVariantMap() if reader.isLengthKnown(): map.reserve(reader.length()) reader.enterContainer() while reader.lastError() == QCborError.NoError and reader.hasNext(): key = readElementAsString(reader) map.insert(key, readOneElement(reader)) if reader.lastError() == QCborError.NoError: reader.leaveContainer()
上面的例子使用了一个名为
readElementAsString
的函数来读取映射的键并获取一个字符串。这是因为CBOR映射可能包含任何类型的键,而不仅仅是字符串。用户代码需要执行此转换,拒绝非字符串键,或者使用QVariantMap和QVariantHash之外的其他容器。例如,如果映射预期包含整数键,建议这样做以减少流大小和解析,正确的容器将是\l{QMap}
或QVariant> \l{QHash}
。QVariant> 注意
上面的代码没有验证长度是否是一个合理的值。如果输入流报告长度是10亿个元素,上面的函数将尝试分配大约24 GB或更多的RAM,这可能导致崩溃。
- isNegativeInteger()¶
- Return type:
布尔
如果当前元素的类型是负整数(即如果
type()
返回NegativeInteger
),则返回true。如果此函数返回true,您可以调用toNegativeInteger()
或toInteger()
来读取该值。另请参阅
type()
toNegativeInteger()
toInteger()
isInteger()
isUnsignedInteger()
- isNull()¶
- Return type:
布尔
如果当前元素是
null
值,则返回true,否则返回false。空值可用于表示某些可选数据的缺失。- isSimpleType()¶
- Return type:
布尔
如果当前元素的类型是任何CBOR简单类型,包括布尔值(true和false)以及null和undefined,则返回true。要找出这是哪种简单类型,请调用
toSimpleType()
。或者,要测试一个特定的简单类型,请调用带有QCborSimpleType
参数的重载。CBOR简单类型是不携带额外值的类型。有255种可能性,但目前只有四个值具有定义的含义。代码不期望处理未知的简单类型,如果发现未知类型,可能会简单地将其流视为无效并丢弃。
另请参阅
QCborSimpleType
type()
isSimpleType(QCborSimpleType)
toSimpleType()
- isSimpleType(st)
- Parameters:
st –
QCborSimpleType
- Return type:
布尔
如果当前元素的类型是简单类型
st
,则返回 true,否则返回 false。如果此函数返回 true,则toSimpleType()
将返回st
。CBOR简单类型是不携带额外值的类型。有255种可能性,但目前只有四个值具有定义的含义。代码不期望处理未知的简单类型,如果发现未知类型,可能会简单地将其流丢弃为无效。
- isString()¶
- Return type:
布尔
如果当前元素的类型是文本字符串(即如果
type()
返回String
),则返回true。如果此函数返回true,您可以调用readString()
来读取该数据。- isTag()¶
- Return type:
布尔
如果当前元素的类型是CBOR标签(即如果
type()
返回Tag
),则返回true。如果此函数返回true,您可以调用toTag()
来读取该数据。- isTrue()¶
- Return type:
布尔
如果当前元素是
true
值,则返回true,否则返回false。- isUndefined()¶
- Return type:
布尔
如果当前元素是
undefined
值,则返回true,否则返回false。未定义的值可能被编码以表示在创建流时某些转换失败或不可能。QCborStreamReader
从不执行任何替换,并且此函数仅在流包含显式未定义值时返回true。- isUnsignedInteger()¶
- Return type:
布尔
如果当前元素的类型是无符号整数(即如果
type()
返回UnsignedInteger
),则返回true。如果此函数返回true,您可以调用toUnsignedInteger()
或toInteger()
来读取该值。- isValid()¶
- Return type:
布尔
如果当前元素有效,则返回 true,否则返回 false。如果存在解码错误或者我们刚刚解析了数组或映射中的最后一个元素,当前元素可能无效。
- lastError()¶
- Return type:
返回解码流时的最后一个错误(如果有)。如果没有遇到错误,则返回一个
NoError
。另请参阅
- leaveContainer()¶
- Return type:
布尔
离开正在处理的数组或映射,并将解码器定位到容器结束后的下一个项目。如果成功离开容器,则返回 true,否则返回 false(通常是解析错误)。每次调用
enterContainer()
必须与调用 leaveContainer() 配对。只有在
hasNext()
返回false且containerDepth()
不为零时才能调用此函数。在任何其他条件下调用它都是错误的。- length()¶
- Return type:
整数
返回字符串或字节数组的长度,或数组中的项目数,或映射中的项目对数(如果已知)。如果长度未知(即如果
isLengthKnown()
返回false),则不得调用此函数。这样做是错误的,并且会导致QCborStreamReader
停止解析输入流。- next([maxRecursion=10000])¶
- Parameters:
maxRecursion – int
- Return type:
布尔
推进CBOR流解码一个元素。通常在解析固定宽度的基本元素(即整数、简单值、标签和浮点值)时,您应该调用此函数。但是,当当前项是字符串、数组或映射时,也可以调用此函数,它将跳过整个元素,包括所有包含的元素。
如果推进成功,此函数返回true,否则返回false。如果流损坏、不完整或数组和映射的嵌套级别超过
maxRecursion
,则可能会失败。当hasNext()
返回false时调用此函数也是一个错误。如果此函数返回false,lastError()
将返回错误代码,详细说明失败的原因。返回
Array
或Map
,分别表示包含当前项的容器是数组还是映射。如果我们当前正在解析根元素,则此函数返回Invalid
。- readAllByteArray()¶
- Return type:
解码当前的字节字符串并返回它。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果发生错误,此函数将返回一个默认构造的QByteArray(),但这可能与某些空字节字符串无法区分。相反,请检查
lastError()
以确定是否发生了错误。此函数不执行任何类型转换,包括从整数或字符串的转换。因此,只有在
isByteArray()
为真时才能调用它;在其他任何条件下调用它都是错误的。注意
此函数无法恢复。也就是说,此函数不应在可能仍在接收CBOR数据的上下文中使用,例如来自套接字或管道。它应仅在完整数据已接收并可在输入
QByteArray
或QIODevice
中使用时使用。另请参阅
readByteArray()
readStringChunk()
isByteArray()
readAllString()
- readAllString()¶
- Return type:
字符串
解码当前文本字符串并返回它。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果发生错误,此函数将返回一个默认构造的QString(),但这可能与某些空文本字符串无法区分。相反,请检查
lastError()
以确定是否发生了错误。此函数不执行任何类型转换,包括从整数或字节数组转换。因此,只有在
isString()
返回true时才能调用它;在其他任何条件下调用它都是错误的。注意
此函数无法恢复。也就是说,此函数不应在可能仍在接收CBOR数据的上下文中使用,例如来自套接字或管道。它应仅在完整数据已接收并可在输入
QByteArray
或QIODevice
中使用时使用。另请参阅
readString()
readStringChunk()
isString()
readAllByteArray()
- readAllUtf8String()¶
- Return type:
解码当前的文本字符串并返回它。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果发生错误,此函数将返回一个默认构造的QString(),但这可能与某些空文本字符串无法区分。相反,请检查
lastError()
以确定是否发生了错误。此函数不执行任何类型转换,包括从整数或字节数组的转换。因此,只有在
isString()
返回true时才能调用它;在其他任何条件下调用它都是错误的。注意
此函数无法恢复。也就是说,此函数不应在可能仍在接收CBOR数据的上下文中使用,例如来自套接字或管道。它应仅在完整数据已接收并可在输入
QByteArray
或QIODevice
中使用时使用。另请参阅
readString()
readStringChunk()
isString()
readAllByteArray()
- readAndAppendToByteArray(dst)¶
- Parameters:
dst –
QByteArray
- Return type:
布尔
解码当前的字节字符串并将其附加到
dst
。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果在解码过程中发生错误,其他可以成功解码的块可能仍然会被写入dst
。如果解码过程中没有发生错误,则返回true
,否则返回false
。此函数不执行任何类型转换,包括从整数或字符串的转换。因此,只有在
isByteArray()
为真时才能调用它;在其他任何条件下调用它都是错误的。注意
此函数无法恢复。也就是说,此函数不应在可能仍在接收CBOR数据的上下文中使用,例如来自套接字或管道。它应仅在完整数据已接收并可在输入
QByteArray
或QIODevice
中使用时使用。另请参阅
readByteArray()
readStringChunk()
isByteArray()
readAndAppendToString()
- readAndAppendToString(dst)¶
- Parameters:
dst – str
- Return type:
布尔
解码当前文本字符串并将其附加到
dst
。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果在解码过程中发生错误,其他可以成功解码的块可能仍然会被写入dst
。如果解码过程中没有错误,则返回true
,否则返回false
。此函数不执行任何类型转换,包括从整数或字节数组的转换。因此,只有在
isString()
返回true时才能调用它;在其他任何条件下调用它都是错误的。注意
此函数无法恢复。也就是说,此函数不应在可能仍在接收CBOR数据的上下文中使用,例如来自套接字或管道。它应仅在完整数据已接收并可在输入
QByteArray
或QIODevice
中使用时使用。另请参阅
readString()
readStringChunk()
isString()
readAndAppendToByteArray()
- readAndAppendToUtf8String(dst)¶
- Parameters:
dst –
QByteArray
- Return type:
布尔
解码当前文本字符串并附加到
dst
。如果字符串是分块的,此函数将遍历所有块并将它们连接起来。如果在解码过程中发生错误,其他可以成功解码的块可能已经被写入dst
。如果解码过程中没有发生错误,则返回true
,否则返回false
。此函数不执行任何类型转换,包括从整数或字节数组的转换。因此,只有在
isString()
返回true时才能调用它;在其他任何条件下调用它都是错误的。注意
此函数无法恢复。也就是说,此函数不应在可能仍在接收CBOR数据的上下文中使用,例如来自套接字或管道。它应仅在完整数据已接收并可在输入
QByteArray
或QIODevice
中使用时使用。另请参阅
readString()
readStringChunk()
isString()
readAndAppendToByteArray()
- readByteArray()¶
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
从CBOR字符串解码一个字节数组块并返回它。此函数用于常规和分块内容,因此调用者必须始终循环调用此函数,即使
isLengthKnown()
为真。此函数的典型用法如下:def decodeBytearray(reader): result = QBytearray() 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()
- readString()¶
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
从CBOR字符串解码一个字符串块并返回它。此函数用于常规和分块字符串内容,因此调用者必须始终循环调用此函数,即使
isLengthKnown()
为真。此函数的典型用法如下:def decodeString(reader): result = QString() 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()
- readUtf8String()¶
- Return type:
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
从CBOR字符串解码一个字符串块并返回它。此函数用于常规和分块字符串内容,因此调用者必须始终循环调用此函数,即使
isLengthKnown()
为真。此函数的典型用法如下所示,类似于readString()
:def decodeString(reader): result = QString() 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时才能调用它;在其他任何条件下调用它都是错误的。另请参阅
readAllString()
readByteArray()
isString()
readStringChunk()
- reparse()¶
重新解析当前元素。当在解析由于在CBOR流结束之前到达输入数据末尾而失败后,源
QIODevice
中有更多数据可用时,必须调用此函数。当从QByteArray()读取时,
addData()
函数会自动调用此函数。如果在读取没有失败时调用它,则不会有任何操作。- reset()¶
将源重置回开头并清除解码器状态。如果源数据是
QByteArray
,QCborStreamReader
将从数组的开头重新开始。如果源数据是
QIODevice
,此函数将调用reset()
,这将定位到字节位置0。如果CBOR流不在设备的开头(例如,文件的开头),那么此函数可能会出错。相反,应将QIODevice
定位到正确的偏移量并调用setDevice()
。另请参阅
将数据源设置为
device
,并将解码器重置为其初始状态。另请参阅
- toBool()¶
- Return type:
布尔
返回当前元素的布尔值。
此函数不执行任何类型转换,包括从整数转换。因此,只有在
isTrue()
、isFalse()
或isBool()
返回true时才能调用它;在其他任何条件下调用它都是错误的。- toDouble()¶
- Return type:
浮点数
返回当前元素的64位双精度浮点值。
此函数不执行任何类型转换,包括从其他浮点类型或整数值的转换。因此,只有在
isDouble()
为真时才能调用它;在其他任何条件下调用它都是错误的。另请参阅
isDouble()
toFloat16()
toFloat()
- toFloat()¶
- Return type:
浮点数
返回当前元素的32位单精度浮点值。
此函数不执行任何类型转换,包括从其他浮点类型或整数值的转换。因此,只有在
isFloat()
为真时才能调用它;在其他任何条件下调用它都是错误的。另请参阅
isFloat()
toFloat16()
toDouble()
- toInteger()¶
- Return type:
整数
返回当前元素的整数值,无论它是负数、正数还是零。如果该值大于263 - 1或小于-263,返回值将溢出并且符号不正确。如果需要处理这些值,请使用
toUnsignedInteger()
或toNegativeInteger()
代替。此函数不执行任何类型转换,包括从布尔值或CBOR标签的转换。因此,只有在
isInteger()
为真时才能调用它;在其他任何条件下调用它都是错误的。另请参阅
isInteger()
toUnsignedInteger()
toNegativeInteger()
- toSimpleType()¶
- Return type:
返回当前简单类型的值。
此函数不执行任何类型转换,包括从整数转换。因此,只有在
isSimpleType()
为真时才能调用它;在任何其他情况下调用它都是错误的。返回当前元素的标签值。
此函数不执行任何类型转换,包括从整数转换。因此,只有在
isTag()
为真时才能调用它;在任何其他条件下调用它都是错误的。标签是附加到通用CBOR类型的64位数字,赋予它们进一步的含义。有关已知标签的列表,请参见
QCborKnownTags
枚举。- toUnsignedInteger()¶
- Return type:
整数
返回当前元素的无符号整数值。
此函数不执行任何类型转换,包括从布尔值或CBOR标签的转换。因此,只有在
isUnsignedInteger()
为真时才能调用它;在其他任何条件下调用它都是错误的。此函数可用于获取超出
toInteger()
返回类型范围的数字。返回当前元素的类型。它是有效类型之一或无效。