En esta página

QCborStreamReader Class

La clase QCborStreamReader es un sencillo descodificador de flujos CBOR que funciona en QByteArray o QIODevice. Más...

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

Nota: Todas las funciones de esta clase son reentrantes.

Tipos Públicos

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

Funciones Públicas

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

Descripción Detallada

Esta clase puede utilizarse para decodificar un flujo de contenido CBOR directamente desde QByteArray o QIODevice. CBOR es la Representación Concisa de Objetos Binarios, una forma muy compacta de codificación de datos binarios que es compatible con JSON. Fue creada por el Grupo de Trabajo sobre Entornos RESTful Restringidos (CoRE) del IETF, que la ha utilizado en muchas nuevas RFC. Está pensado para ser utilizado junto con el protocolo CoAP.

QCborStreamReader proporciona una API similar a la de StAX, similar a la de QXmlStreamReader. Su uso requiere un poco de conocimiento de la codificación CBOR. Para una API más sencilla, véase QCborValue y especialmente la función de descodificación QCborValue::fromCbor().

Típicamente, uno crea un QCborStreamReader pasando la fuente QByteArray o QIODevice como parámetro al constructor, y luego extrae elementos del flujo si no hubo errores en la decodificación. Hay tres clases de tipos CBOR:

TipoTiposComportamiento
Ancho fijoEnteros, Etiquetas, Tipos simples, coma flotanteEl valor es pre-parseado por QCborStreamReader, por lo que las funciones accesorias son const. Debe llamar a next() para avanzar.
CadenasMatrices de bytes, cadenas de textoLa longitud (si se conoce) se analiza previamente, pero no la cadena en sí. Las funciones accesorias no son constantes y pueden asignar memoria. Una vez invocadas, las funciones accesorias avanzan automáticamente al siguiente elemento.
ContenedoresMatrices, mapasLa longitud (si se conoce) se analiza previamente. Para acceder a los elementos, debe llamar a enterContainer(), leer todos los elementos, y luego llamar a leaveContainer(). Esa función avanza al siguiente elemento.

Por lo tanto, una función de procesador suele tener este aspecto:

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();
    }

}

Soporte CBOR

La siguiente tabla enumera las características CBOR que soporta QCborStreamReader.

CaracterísticaSoporte
Números sin signoSí (rango completo)
Números negativosSí (rango completo)
Cadenas de bytes
Cadenas de texto
Cadenas fragmentadas
EtiquetasSí (arbitrarias)
Booleanos
Nulo
Indefinido
Valores simples arbitrarios
Flotante de media precisión (16 bits)
Flotante de precisión simple (32 bits)
Flotante de doble precisión (64 bits)
Infinitos y coma flotante NaN
Matrices y mapas de longitud determinada
Matrices y mapas de longitud indeterminada
Tipos de clave de mapa distintos de cadenas y enterosSí (arbitrario)

Tratamiento de flujos CBOR no válidos o incompletos

QCborStreamReader es capaz de detectar por sí mismo entradas corruptas. La biblioteca que utiliza ha sido ampliamente probada contra cualquier tipo de entrada no válida y es capaz de informar de los errores. Si se detecta alguno, QCborStreamReader pondrá en lastError() un valor distinto de QCborError::NoError, indicando qué situación se ha detectado.

La mayoría de los errores detectados por QCborStreamReader durante el análisis sintáctico normal de los elementos no son recuperables. El código que utiliza QCborStreamReader puede optar por manejar los datos que fueron decodificados correctamente o puede optar por descartar la totalidad de los datos.

El único error recuperable es QCborError::EndOfFile, que indica que se necesitan más datos para completar el análisis. Esta situación es útil cuando se leen datos de una fuente asíncrona, como una tubería (QProcess) o un socket (QTcpSocket, QUdpSocket, QNetworkReply, etc.). Cuando llegan más datos, el código circundante necesita llamar a addData(), si está analizando desde QByteArray, o a reparse(), si está leyendo directamente desde el QIDOevice que ahora tiene más datos disponibles (ver setDevice()).

Ver también QCborStreamWriter, QCborValue, QXmlStreamReader, Analizar y mostrar datos CBOR, Convertidor de serialización, y Guardar y cargar un juego.

Documentación de tipos de miembros

enum QCborStreamReader::StringResultCode

Este enum es devuelto por readString() y readByteArray() y se utiliza para indicar cuál es el estado del análisis sintáctico.

ConstanteValorDescripción
QCborStreamReader::EndOfString0El análisis de la cadena se ha completado, sin errores.
QCborStreamReader::Ok1La función ha devuelto datos; no se ha producido ningún error.
QCborStreamReader::Error-1El análisis falló con un error.

enum QCborStreamReader::Type

Esta enumeración contiene todos los tipos CBOR posibles descodificados por QCborStreamReader. CBOR tiene 7 tipos principales, además de una serie de tipos simples sin valor y valores de coma flotante.

ConstanteValorDescripción
QCborStreamReader::UnsignedInteger0x00(Tipo principal 0) Va de 0 a264 - 1 (18.446.744.073.709.551.616)
QCborStreamReader::NegativeInteger0x20(Mayor tipo 1) Rangos de -1 a -264 (-18.446.744.073.709.551.616)
QCborStreamReader::ByteArrayByteString(Major type 2) Datos binarios arbitrarios.
QCborStreamReader::ByteString0x40Un alias de ByteArray.
QCborStreamReader::StringTextString(Major type 3) Texto Unicode, que puede contener NULs.
QCborStreamReader::TextString0x60Un alias de String
QCborStreamReader::Array0x80(Major type 4) Matriz de elementos heterogéneos.
QCborStreamReader::Map0xa0(Major type 5) Mapa/diccionario de elementos heterogéneos.
QCborStreamReader::Tag0xc0(Major type 6) Números que dan un valor semántico adicional a los elementos CBOR genéricos. Para más información, véase QCborTag.
QCborStreamReader::SimpleType0xe0(Major type 7) Tipos sin valor adicional. Incluye booleanos (verdadero y falso), nulo, indefinido.
QCborStreamReader::Float16HalfFloatPunto flotante de media precisión IEEE 754 (qfloat16).
QCborStreamReader::HalfFloat0xf9Un alias de Float16.
QCborStreamReader::Float0xfaIEEE 754 coma flotante de precisión simple (float).
QCborStreamReader::Double0xfbPunto flotante de doble precisión IEEE 754 (double).
QCborStreamReader::Invalid0xffNo es un tipo válido, ya sea por un error de análisis o por haber llegado al final de una matriz o mapa.

Documentación de las funciones miembro

QCborStreamReader::QCborStreamReader()

Crea un objeto QCborStreamReader sin datos de origen. Después de la construcción, QCborStreamReader informará de un error de análisis.

Puedes añadir más datos llamando a addData() o configurando un dispositivo fuente diferente usando setDevice().

Véase también addData() y isValid().

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

Crea un objeto QCborStreamReader que analizará el flujo CBOR encontrado al leer de device. QCborStreamReader no toma propiedad de device, por lo que debe permanecer válido hasta que este objeto sea destruido.

Se trata de una función sobrecargada.

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

Crea un objeto QCborStreamReader que analizará el flujo CBOR encontrado en data.

Esta es una función sobrecargada.

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

Crea un objeto QCborStreamReader con len bytes de datos comenzando en data. El puntero debe permanecer válido hasta que QCborStreamReader sea destruido.

Se trata de una función sobrecargada.

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

Crea un objeto QCborStreamReader con len bytes de datos comenzando en data. El puntero debe permanecer válido hasta que QCborStreamReader sea destruido.

Se trata de una función sobrecargada.

[noexcept] QCborStreamReader::~QCborStreamReader()

Destruye este objeto QCborStreamReader y libera los recursos asociados.

void QCborStreamReader::addData(const QByteArray &data)

Añade data al flujo CBOR y repara el elemento actual. Esta función es útil si previamente se alcanzó el final de los datos mientras se procesaba el flujo, pero ahora hay más datos disponibles.

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

Añade len bytes de datos comenzando en data al flujo CBOR y repara el elemento actual. Esta función es útil si previamente se alcanzó el final de los datos mientras se procesaba el flujo, pero ahora hay más datos disponibles.

Se trata de una función sobrecargada.

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

Añade len bytes de datos comenzando en data al flujo CBOR y repara el elemento actual. Esta función es útil si previamente se alcanzó el final de los datos mientras se procesaba el flujo, pero ahora hay más datos disponibles.

Se trata de una función sobrecargada.

void QCborStreamReader::clear()

Borra el estado del descodificador y restablece los datos de entrada a una matriz de bytes vacía. Después de llamar a esta función, QCborStreamReader indicará un error de análisis.

Llama a addData() para añadir más datos a analizar.

Véase también reset() y setDevice().

int QCborStreamReader::containerDepth() const

Devuelve el número de contenedores en los que este flujo ha entrado con enterContainer() pero de los que aún no ha salido.

Véase también enterContainer() y leaveContainer().

qint64 QCborStreamReader::currentOffset() const

Devuelve el desplazamiento en el flujo de entrada del elemento que se está decodificando actualmente. El desplazamiento actual es el número de bytes descodificados hasta el momento sólo si los datos de origen son un QByteArray o se trata de un QIODevice que estaba posicionado en su inicio cuando comenzó la descodificación.

Véase también reset(), clear() y device().

qsizetype QCborStreamReader::currentStringChunkSize() const

Devuelve el tamaño del trozo de texto o cadena de bytes actual. Si el flujo CBOR contiene una cadena sin trozos (es decir, si isLengthKnown() devuelve true), esta función devuelve el tamaño de toda la cadena, igual que length().

Esta función es útil para preasignar el búfer cuyo puntero puede pasarse posteriormente a readStringChunk().

Véase también readString(), readByteArray(), y readStringChunk().

QIODevice *QCborStreamReader::device() const

Devuelve el QIODevice que se estableció con setDevice() o con el constructor QCborStreamReader. Si este objeto estaba leyendo de un QByteArray, esta función devuelve nullptr en su lugar.

Véase también setDevice().

bool QCborStreamReader::enterContainer()

Introduce el array o mapa que es el elemento actual y se prepara para iterar los elementos contenidos en el contenedor. Devuelve true si la entrada en el contenedor se ha realizado correctamente, false en caso contrario (normalmente, un error de análisis). Cada llamada a enterContainer() debe ir acompañada de una llamada a leaveContainer().

Esta función sólo puede invocarse si el elemento actual es una matriz o un mapa (es decir, si isArray(), isMap() o isContainer() es verdadero). Llamarla en cualquier otra condición es un error.

Véase también leaveContainer(), isContainer(), isArray() y isMap().

[noexcept] bool QCborStreamReader::hasNext() const

Devuelve true si hay más elementos que decodificar en el contenedor actual o false si hemos llegado al final. Si estamos analizando el elemento raíz, si hasNext() devuelve false indica que el análisis se ha completado; de lo contrario, si la profundidad del contenedor es distinta de cero, entonces el código externo necesita llamar a leaveContainer().

Véase también parentContainerType(), containerDepth() y leaveContainer().

bool QCborStreamReader::isArray() const

Devuelve true si el tipo del elemento actual es un array (es decir, si type() devuelve QCborStreamReader::Array). Si esta función devuelve true, puede llamar a enterContainer() para comenzar a analizar ese contenedor.

Cuando el elemento actual es un array, también puede llamar a isLengthKnown() para averiguar si el tamaño del array está explícito en el flujo CBOR. Si lo está, ese tamaño puede obtenerse llamando a length().

El siguiente ejemplo preasigna un QVariantList dado el tamaño del array para una decodificación más eficiente:

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

Nota: El código anterior no valida que la longitud sea un valor razonable. Si el flujo de entrada informa de que la longitud es de 1.000 millones de elementos, la función anterior intentará asignar unos 16 GB o más de RAM, lo que puede provocar un fallo.

Véase también type(), isMap(), isLengthKnown(), length(), enterContainer(), y leaveContainer().

bool QCborStreamReader::isBool() const

Devuelve true si el elemento actual es un valor booleano (true o false), false si es cualquier otra cosa. Si esta función devuelve true, puede llamar a toBool() para recuperar el valor del booleano. También puede llamar a toSimpleType() y comparar con QCborSimpleValue::True o QCborSimpleValue::False.

Véase también type(), isFalse(), isTrue(), toBool(), isSimpleType(), y toSimpleType().

bool QCborStreamReader::isByteArray() const

Devuelve verdadero si el tipo del elemento actual es una matriz de bytes (es decir, si type() devuelve QCborStreamReader::ByteArray). Si esta función devuelve true, puede llamar a readByteArray() para leer esos datos.

Véase también type(), readByteArray(), y isString().

bool QCborStreamReader::isContainer() const

Devuelve true si el elemento actual es un contenedor (es decir, un array o un mapa), false si es cualquier otra cosa. Si el elemento actual es un contenedor, se puede utilizar la función isLengthKnown() para averiguar si el tamaño del contenedor está explícito en el flujo y, si es así, se puede utilizar length() para obtener ese tamaño.

Más importante aún, para un contenedor, la función enterContainer() está disponible para comenzar a iterar a través de los elementos que contiene.

Véase también type(), isArray(), isMap(), isLengthKnown(), length(), enterContainer(), leaveContainer() y containerDepth().

bool QCborStreamReader::isDouble() const

Devuelve verdadero si el tipo del elemento actual es un punto flotante de doble precisión IEEE 754 (es decir, si type() devuelve QCborStreamReader::Double). Si esta función devuelve true, puede llamar a toDouble() para leer esos datos.

Véase también type(), toDouble(), isFloat16() y isFloat().

bool QCborStreamReader::isFalse() const

Devuelve true si el elemento actual es el valor false, false si es cualquier otro.

Véase también type(), isTrue(), isBool(), toBool(), isSimpleType() y toSimpleType().

bool QCborStreamReader::isFloat16() const

Devuelve verdadero si el tipo del elemento actual es un punto flotante de media precisión IEEE 754 (es decir, si type() devuelve QCborStreamReader::Float16). Si esta función devuelve true, puede llamar a toFloat16() para leer esos datos.

Véase también type(), toFloat16(), isFloat() y isDouble().

bool QCborStreamReader::isFloat() const

Devuelve verdadero si el tipo del elemento actual es un punto flotante de precisión única IEEE 754 (es decir, si type() devuelve QCborStreamReader::Float). Si esta función devuelve true, puede llamar a toFloat() para leer esos datos.

Véase también type(), toFloat(), isFloat16() y isDouble().

bool QCborStreamReader::isInteger() const

Devuelve verdadero si el tipo del elemento actual es un entero sin signo o negativo (es decir, si type() devuelve QCborStreamReader::UnsignedInteger o QCborStreamReader::NegativeInteger). Si esta función devuelve true, puede llamar a toInteger() para leer ese valor.

Véase también type(), toInteger(), toUnsignedInteger(), toNegativeInteger(), isUnsignedInteger() y isNegativeInteger().

bool QCborStreamReader::isInvalid() const

Devuelve true si el elemento actual no es válido, false en caso contrario. El elemento actual puede ser inválido si hubo un error de decodificación o si acabamos de analizar el último elemento de un array o mapa.

Nota: Esta función no debe confundirse con isNull(). Null es un tipo CBOR normal que debe ser manejado por la aplicación.

Véase también type() y isValid().

[noexcept] bool QCborStreamReader::isLengthKnown() const

Devuelve true si se conoce la longitud de la matriz, mapa, matriz de bytes o cadena actual (explícita en el flujo CBOR), false en caso contrario. Esta función sólo debe llamarse si el elemento es uno de ellos.

Si se conoce la longitud, puede obtenerse llamando a length().

Si no se conoce la longitud de un mapa o de una matriz, está implícita en el número de elementos presentes en el flujo. QCborStreamReader no dispone de API para calcular la longitud en esa condición.

Las cadenas y las matrices de bytes también pueden tener una longitud indeterminada (es decir, pueden transmitirse en varios trozos). Actualmente no pueden crearse con QCborStreamWriter, pero podrían crearse con otros codificadores, por lo que QCborStreamReader los admite.

Véase también length(), QCborStreamWriter::startArray(), y QCborStreamWriter::startMap().

bool QCborStreamReader::isMap() const

Devuelve verdadero si el tipo del elemento actual es un mapa (es decir, si type() devuelve QCborStreamReader::Map). Si esta función devuelve true, puede llamar a enterContainer() para comenzar a analizar ese contenedor.

Cuando el elemento actual es un mapa, también puede llamar a isLengthKnown() para averiguar si el tamaño del mapa está explícito en el flujo CBOR. Si lo está, ese tamaño puede obtenerse llamando a length().

El siguiente ejemplo preasigna un QVariantMap dado el tamaño del mapa para una decodificación más eficiente:

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

El ejemplo anterior utiliza una función llamada readElementAsString para leer las claves del mapa y obtener una cadena. Esto se debe a que los mapas CBOR pueden contener cualquier tipo como claves, no sólo cadenas. El código de usuario debe realizar esta conversión, rechazar las claves que no sean cadenas o utilizar un contenedor distinto de QVariantMap y QVariantHash. Por ejemplo, si se espera que el mapa contenga claves de tipo entero, lo que se recomienda ya que reduce el tamaño del flujo y el análisis sintáctico, el contenedor correcto sería \l{QMap}<int, QVariant> o \l{QHash}<int, QVariant>.

Nota: El código anterior no valida que la longitud sea un valor razonable. Si el flujo de entrada informa de que la longitud es de 1.000 millones de elementos, la función anterior intentará asignar unos 24 GB o más de RAM, lo que puede provocar un fallo.

Véase también type(), isArray(), isLengthKnown(), length(), enterContainer(), y leaveContainer().

bool QCborStreamReader::isNegativeInteger() const

Devuelve verdadero si el tipo del elemento actual es un entero negativo (es decir, si type() devuelve QCborStreamReader::NegativeInteger). Si esta función devuelve verdadero, puede llamar a toNegativeInteger() o toInteger() para leer ese valor.

Véase también type(), toNegativeInteger(), toInteger(), isInteger(), y isUnsignedInteger().

bool QCborStreamReader::isNull() const

Devuelve true si el elemento actual es el valor null, false si es cualquier otra cosa. Se pueden utilizar valores nulos para indicar la ausencia de algunos datos opcionales.

Nota: Esta función no es lo contrario de isValid(). Un valor nulo es un valor CBOR válido.

Véase también type(), isSimpleType() y toSimpleType().

bool QCborStreamReader::isSimpleType() const

Devuelve verdadero si el tipo del elemento actual es cualquier tipo simple CBOR, incluyendo un valor booleano (verdadero y falso), así como nulo e indefinido. Para averiguar de qué tipo simple se trata, llame a toSimpleType(). Alternativamente, para comprobar un tipo simple específico, llame a la sobrecarga que toma un parámetro QCborSimpleType.

Los tipos simples CBOR son tipos que no llevan valor adicional. Existen 255 posibilidades, pero actualmente sólo hay cuatro valores que tienen un significado definido. No se espera que el código se las arregle con tipos simples desconocidos y puede simplemente descartar el flujo como inválido si encuentra uno desconocido.

Ver también QCborSimpleType, type(), isSimpleType(QCborSimpleType), y toSimpleType().

bool QCborStreamReader::isSimpleType(QCborSimpleType st) const

Devuelve true si el tipo del elemento actual es el tipo simple st, false en caso contrario. Si esta función devuelve verdadero, entonces toSimpleType() devolverá st.

Los tipos simples CBOR son tipos que no llevan valor adicional. Existen 255 posibilidades, pero actualmente sólo hay cuatro valores que tienen un significado definido. No se espera que el código haga frente a tipos simples desconocidos y puede simplemente descartar el flujo como inválido si encuentra uno desconocido.

Véase también QCborSimpleType, type(), isSimpleType(), y toSimpleType().

bool QCborStreamReader::isString() const

Devuelve true si el tipo del elemento actual es una cadena de texto (es decir, si type() devuelve QCborStreamReader::String). Si esta función devuelve true, puede llamar a readString() para leer esos datos.

Véase también type(), readString(), y isByteArray().

bool QCborStreamReader::isTag() const

Devuelve verdadero si el tipo del elemento actual es una etiqueta CBOR (es decir, si type() devuelve QCborStreamReader::Tag). Si esta función devuelve true, puede llamar a toTag() para leer esos datos.

Véase también type() y toTag().

bool QCborStreamReader::isTrue() const

Devuelve true si el elemento actual es el valor true, false si es cualquier otro.

Véase también type(), isFalse(), isBool(), toBool(), isSimpleType() y toSimpleType().

bool QCborStreamReader::isUndefined() const

Devuelve true si el elemento actual es el valor undefined, false si es cualquier otra cosa. Los valores indefinidos pueden codificarse para indicar que alguna conversión falló o no fue posible al crear el flujo. QCborStreamReader nunca realiza ningún reemplazo y esta función sólo devolverá true si el flujo contiene un valor indefinido explícito.

Véase también type(), isSimpleType(), y toSimpleType().

bool QCborStreamReader::isUnsignedInteger() const

Devuelve verdadero si el tipo del elemento actual es un entero sin signo (es decir, si type() devuelve QCborStreamReader::UnsignedInteger). Si esta función devuelve true, puede llamar a toUnsignedInteger() o toInteger() para leer ese valor.

Véase también type(), toUnsignedInteger(), toInteger(), isInteger(), y isNegativeInteger().

bool QCborStreamReader::isValid() const

Devuelve true si el elemento actual es válido, false en caso contrario. El elemento actual puede ser inválido si hubo un error de decodificación o si acabamos de analizar el último elemento de un array o mapa.

Nota: Esta función no es lo contrario de isNull(). Null es un tipo CBOR normal que debe ser manejado por la aplicación.

Véase también type() y isInvalid().

QCborError QCborStreamReader::lastError() const

Devuelve el último error en la descodificación del flujo, si lo hubo. Si no se encontró ningún error, devuelve un QCborError::NoError.

Véase también isValid().

bool QCborStreamReader::leaveContainer()

Abandona el array o mapa cuyos elementos estaban siendo procesados y posiciona el decodificador en el siguiente elemento tras el final del contenedor. Devuelve true si se ha podido abandonar el contenedor, false en caso contrario (normalmente, un error de análisis). Cada llamada a enterContainer() debe ir acompañada de una llamada a leaveContainer().

Esta función sólo puede invocarse si hasNext() ha devuelto false y containerDepth() no es cero. Llamarla en cualquier otra condición es un error.

Véase también enterContainer(), parentContainerType() y containerDepth().

quint64 QCborStreamReader::length() const

Devuelve la longitud de la cadena o matriz de bytes, o el número de elementos de una matriz o el número de pares de elementos de un mapa, si se conoce. No se debe llamar a esta función si se desconoce la longitud (es decir, si isLengthKnown() devuelve false). Es un error hacerlo y provocará que QCborStreamReader deje de analizar el flujo de entrada.

Véase también isLengthKnown(), QCborStreamWriter::startArray(), y QCborStreamWriter::startMap().

bool QCborStreamReader::next(int maxRecursion = 10000)

Avanza el flujo CBOR descodificando un elemento. Normalmente se debe llamar a esta función cuando se analizan elementos básicos de ancho fijo (es decir, enteros, valores simples, etiquetas y valores de coma flotante). Pero también se puede llamar a esta función cuando el elemento actual es una cadena, una matriz o un mapa, y saltará sobre ese elemento entero, incluyendo todos los elementos contenidos.

Esta función devuelve true si el avance fue exitoso, false en caso contrario. Puede fallar si el flujo está corrupto, incompleto o si el nivel de anidamiento de arrays y mapas excede maxRecursion. Llamar a esta función cuando hasNext() ha devuelto false también es un error. Si esta función devuelve false, lastError() devolverá el código de error detallando cuál fue el fallo.

Véase también lastError(), isValid() y hasNext().

QCborStreamReader::Type QCborStreamReader::parentContainerType() const

Devuelve QCborStreamReader::Array o QCborStreamReader::Map, indicando si el contenedor que contiene el elemento actual era un array o un mapa, respectivamente. Si actualmente estamos analizando el elemento raíz, esta función devuelve QCborStreamReader::Invalid.

Véase también containerDepth() y enterContainer().

[since 6.7] QByteArray QCborStreamReader::readAllByteArray()

Decodifica la cadena de bytes actual y la devuelve. Si la cadena está dividida en trozos, esta función iterará sobre todos los trozos y los concatenará. Si se produce un error, esta función devuelve un QByteArray() construido por defecto, pero que puede no ser distinguible de ciertas cadenas de bytes vacías. En su lugar, compruebe lastError() para determinar si se ha producido un error.

Esta función no realiza ninguna conversión de tipo, ni de enteros ni de cadenas. Por lo tanto, sólo puede ser llamada si isByteArray() es verdadero; llamarla en cualquier otra condición es un error.

Nota: Esta función no puede reanudarse. Es decir, esta función no debe utilizarse en contextos en los que los datos CBOR puedan seguir recibiéndose, por ejemplo desde un socket o una tubería. Sólo debe utilizarse cuando los datos completos ya se han recibido y están disponibles en la entrada QByteArray o QIODevice.

Esta función se introdujo en Qt 6.7.

Véase también readByteArray(), readStringChunk(), isByteArray(), y readAllString().

[since 6.7] QString QCborStreamReader::readAllString()

Decodifica la cadena de texto actual y la devuelve. Si la cadena está dividida en trozos, esta función iterará sobre todos los trozos y los concatenará. Si ocurre un error, esta función devuelve un QString() construido por defecto, pero que puede no ser distinguible de ciertas cadenas de texto vacías. En su lugar, compruebe lastError() para determinar si se ha producido un error.

Esta función no realiza ninguna conversión de tipo, ni de enteros ni de matrices de bytes. Por lo tanto, sólo puede llamarse si isString() devuelve verdadero; llamarla en cualquier otra condición es un error.

Nota: Esta función no puede reanudarse. Es decir, esta función no debe utilizarse en contextos en los que los datos CBOR puedan seguir recibiéndose, por ejemplo desde un socket o una tubería. Sólo debe utilizarse cuando los datos completos ya se han recibido y están disponibles en la entrada QByteArray o QIODevice.

Esta función se introdujo en Qt 6.7.

Véase también readString(), readStringChunk(), isString(), y readAllByteArray().

[since 6.7] QByteArray QCborStreamReader::readAllUtf8String()

Decodifica la cadena de texto actual y la devuelve. Si la cadena está dividida en trozos, esta función iterará sobre todos los trozos y los concatenará. Si ocurre un error, esta función devuelve un QString() construido por defecto, pero que puede no ser distinguible de ciertas cadenas de texto vacías. En su lugar, compruebe lastError() para determinar si se ha producido un error.

Esta función no realiza ninguna conversión de tipo, ni siquiera a partir de enteros o de matrices de bytes. Por lo tanto, sólo puede llamarse si isString() devuelve verdadero; llamarla en cualquier otra condición es un error.

Nota: Esta función no puede reanudarse. Es decir, esta función no debe utilizarse en contextos en los que los datos CBOR puedan seguir recibiéndose, por ejemplo desde un socket o una tubería. Sólo debe utilizarse cuando los datos completos ya se han recibido y están disponibles en la entrada QByteArray o QIODevice.

Esta función se introdujo en Qt 6.7.

Véase también readString(), readStringChunk(), isString(), y readAllByteArray().

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

Decodifica la cadena de bytes actual y la añade a dst. Si la cadena está dividida en trozos, esta función iterará sobre todos los trozos y los concatenará. Si se produce un error durante la descodificación, es posible que otros trozos que se hayan descodificado correctamente se hayan escrito en dst. Devuelve true si la descodificación se ha realizado sin errores, false en caso contrario.

Esta función no realiza conversiones de tipo, ni de enteros ni de cadenas. Por lo tanto, sólo puede ser llamada si isByteArray() es verdadero; llamarla en cualquier otra condición es un error.

Nota: Esta función no puede reanudarse. Es decir, esta función no debe utilizarse en contextos en los que los datos CBOR puedan seguir recibiéndose, por ejemplo desde un socket o una tubería. Sólo debe utilizarse cuando los datos completos ya se han recibido y están disponibles en la entrada QByteArray o QIODevice.

Esta función se introdujo en Qt 6.7.

Véase también readByteArray(), readStringChunk(), isByteArray(), y readAndAppendToString().

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

Decodifica la cadena de texto actual y la añade a dst. Si la cadena está dividida en trozos, esta función iterará sobre todos los trozos y los concatenará. Si se produce un error durante la descodificación, es posible que otros trozos que se hayan descodificado correctamente se hayan escrito en dst. Devuelve true si la descodificación se ha realizado sin errores, false en caso contrario.

Esta función no realiza conversiones de tipo, ni de enteros ni de matrices de bytes. Por lo tanto, sólo puede ser llamada si isString() devolvió verdadero; llamarla en cualquier otra condición es un error.

Nota: Esta función no puede reanudarse. Es decir, esta función no debe utilizarse en contextos en los que los datos CBOR puedan seguir recibiéndose, por ejemplo desde un socket o una tubería. Sólo debe utilizarse cuando los datos completos ya se han recibido y están disponibles en la entrada QByteArray o QIODevice.

Esta función se introdujo en Qt 6.7.

Véase también readString(), readStringChunk(), isString(), y readAndAppendToByteArray().

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

Decodifica la cadena de texto actual y la añade a dst. Si la cadena está dividida en trozos, esta función iterará sobre todos los trozos y los concatenará. Si se produce un error durante la descodificación, es posible que otros trozos que se hayan descodificado correctamente se hayan escrito en dst. Devuelve true si la descodificación se ha realizado sin errores, false en caso contrario.

Esta función no realiza conversiones de tipo, ni de enteros ni de matrices de bytes. Por lo tanto, sólo puede ser llamada si isString() devolvió verdadero; llamarla en cualquier otra condición es un error.

Nota: Esta función no puede reanudarse. Es decir, esta función no debe utilizarse en contextos en los que los datos CBOR puedan seguir recibiéndose, por ejemplo desde un socket o una tubería. Sólo debe utilizarse cuando los datos completos ya se han recibido y están disponibles en la entrada QByteArray o QIODevice.

Esta función se introdujo en Qt 6.7.

Véase también readString(), readStringChunk(), isString(), y readAndAppendToByteArray().

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

Decodifica un trozo de matriz de bytes de la cadena CBOR y lo devuelve. Esta función se utiliza tanto para el contenido normal como para el contenido en trozos, por lo que la persona que llama siempre debe hacer un bucle llamando a esta función, incluso si isLengthKnown() es verdadero. El uso típico de esta función es el siguiente:

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

La función readAllByteArray() implementa el bucle anterior y algunas comprobaciones adicionales.

Esta función no realiza ninguna conversión de tipo, ni de enteros ni de cadenas. Por lo tanto, sólo puede ser llamada si isByteArray() es verdadero; llamarla en cualquier otra condición es un error.

Véase también readAllByteArray(), readString(), isByteArray() y readStringChunk().

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

Decodifica un trozo de cadena de la cadena CBOR y lo devuelve. Esta función se utiliza tanto para el contenido regular como para el contenido en trozos, por lo que la persona que llama a esta función siempre debe hacer un bucle alrededor de la misma, incluso si isLengthKnown() es verdadero. El uso típico de esta función es el siguiente:

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

La función readAllString() implementa el bucle anterior y algunas comprobaciones adicionales.

Esta función no realiza ninguna conversión de tipo, ni de enteros ni de matrices de bytes. Por lo tanto, sólo puede ser llamada si isString() devuelve verdadero; llamarla en cualquier otra condición es un error.

Véase también readAllString(), readByteArray(), isString() y readStringChunk().

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

Lee el trozo de cadena actual en el búfer apuntado por ptr, cuyo tamaño es maxlen. Esta función devuelve un objeto StringResult, con el número de bytes copiados en ptr guardados en el miembro \l StringResult::data . El miembro \l StringResult::status indica si hubo un error al leer la cadena, si se copiaron datos o si éste era el último trozo.

Esta función puede invocarse tanto para los tipos String como ByteArray. Para estos últimos, esta función leerá los mismos datos que hubiera devuelto readByteArray(). Para cadenas, devuelve el equivalente UTF-8 del QString que se hubiera devuelto.

Esta función suele utilizarse junto con currentStringChunkSize() en un bucle. Por ejemplo:

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);

A diferencia de readByteArray() y readString(), esta función no está limitada por los límites de implementación de QByteArray y QString.

Nota: Esta función no verifica que el contenido UTF-8 esté formateado correctamente. Esto significa que esta función no produce el error QCborError::InvalidUtf8String, incluso cuando readString() sí lo hace.

Véase también currentStringChunkSize(), readString(), readByteArray(), isString() y isByteArray().

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

Decodifica un trozo de cadena de la cadena CBOR y lo devuelve. Esta función se utiliza tanto para el contenido regular como para el contenido en trozos, por lo que la persona que llama siempre debe hacer un bucle llamando a esta función, incluso si isLengthKnown() es verdadero. El uso típico de esta función es como para readString() en lo que sigue:

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

La función readAllUtf8String() implementa el bucle anterior y algunas comprobaciones adicionales.

Esta función no realiza ninguna conversión de tipo, ni de enteros ni de matrices de bytes. Por lo tanto, sólo puede ser llamada si isString() devuelve verdadero; llamarla en cualquier otra condición es un error.

Esta función se introdujo en Qt 6.7.

Véase también readAllString(), readByteArray(), isString() y readStringChunk().

void QCborStreamReader::reparse()

Repasa el elemento actual. Esta función debe llamarse cuando hay más datos disponibles en la fuente QIODevice después de que fallara el análisis sintáctico por llegar al final de los datos de entrada antes del final del flujo CBOR.

Cuando se lee de QByteArray(), la función addData() llama automáticamente a esta función. Llamarla cuando la lectura no ha fallado es un no-op.

void QCborStreamReader::reset()

Restablece la fuente al principio y borra el estado del descodificador. Si los datos de origen eran un QByteArray, QCborStreamReader reiniciará desde el principio de la matriz.

Si los datos de origen son un QIODevice, esta función llamará a QIODevice::reset(), que buscará la posición de byte 0. Si el flujo CBOR no se encuentra al principio del dispositivo (por ejemplo, al principio de un archivo), entonces esta función probablemente hará lo incorrecto. En su lugar, posicione QIODevice en el desplazamiento correcto y llame a setDevice().

Véase también clear() y setDevice().

void QCborStreamReader::setDevice(QIODevice *device)

Establece la fuente de datos en device, restableciendo el decodificador a su estado inicial.

Véase también device().

bool QCborStreamReader::toBool() const

Devuelve el valor booleano del elemento actual.

Esta función no realiza ninguna conversión de tipo, incluyendo desde entero. Por lo tanto, sólo puede llamarse si isTrue(), isFalse() o isBool() devuelven verdadero; llamarla en cualquier otra condición es un error.

Véase también isBool(), isTrue(), isFalse() y toInteger().

double QCborStreamReader::toDouble() const

Devuelve el valor en coma flotante de 64 bits y doble precisión del elemento actual.

Esta función no realiza ninguna conversión de tipo, ni de otros tipos de coma flotante ni de valores enteros. Por lo tanto, sólo puede ser llamada si isDouble() es verdadero; llamarla en cualquier otra condición es un error.

Véase también isDouble(), toFloat16() y toFloat().

qfloat16 QCborStreamReader::toFloat16() const

Devuelve el valor en coma flotante de 16 bits y media precisión del elemento actual.

Esta función no realiza ninguna conversión de tipo, ni de otros tipos de coma flotante ni de valores enteros. Por lo tanto, sólo puede ser llamada si isFloat16() es verdadero; llamarla en cualquier otra condición es un error.

Véase también isFloat16(), toFloat() y toDouble().

float QCborStreamReader::toFloat() const

Devuelve el valor en coma flotante de 32 bits de precisión simple del elemento actual.

Esta función no realiza ninguna conversión de tipo, ni de otros tipos de coma flotante ni de valores enteros. Por lo tanto, sólo puede ser llamada si isFloat() es verdadero; llamarla en cualquier otra condición es un error.

Véase también isFloat(), toFloat16() y toDouble().

qint64 QCborStreamReader::toInteger() const

Devuelve el valor entero del elemento actual, ya sea negativo, positivo o cero. Si el valor es mayor que263 - 1 o menor que -263, el valor devuelto se desbordará y tendrá un signo incorrecto. Si es necesario manejar esos valores, utilice toUnsignedInteger() o toNegativeInteger() en su lugar.

Esta función no realiza ninguna conversión de tipo, ni siquiera de etiqueta booleana o CBOR. Por lo tanto, sólo puede llamarse si isInteger() es verdadero; llamarla en cualquier otra condición es un error.

Véase también isInteger(), toUnsignedInteger() y toNegativeInteger().

QCborNegativeInteger QCborStreamReader::toNegativeInteger() const

Devuelve el valor entero negativo del elemento actual. QCborNegativeValue es un entero sin signo de 64 bits que contiene el valor absoluto del número negativo que se almacenó en el flujo CBOR. Además, QCborNegativeValue(0) representa el número -264.

Esta función no realiza ninguna conversión de tipo, incluyendo desde booleano o etiqueta CBOR. Por lo tanto, sólo puede ser llamada si isNegativeInteger() es verdadero; llamarla en cualquier otra condición es un error.

Esta función puede utilizarse para obtener números fuera del rango del tipo de retorno de toInteger(). Sin embargo, se desaconseja el uso de números negativos menores que -263.

Véase también type(), toInteger(), isNegativeInteger() y isUnsignedInteger().

QCborSimpleType QCborStreamReader::toSimpleType() const

Devuelve el valor del tipo simple actual.

Esta función no realiza ninguna conversión de tipo, incluyendo desde entero. Por lo tanto, sólo puede llamarse si isSimpleType() es verdadero; llamarla en cualquier otra condición es un error.

Véase también isSimpleType(), isTrue(), isFalse(), isBool(), isNull() y isUndefined().

QCborTag QCborStreamReader::toTag() const

Devuelve el valor de la etiqueta del elemento actual.

Esta función no realiza ninguna conversión de tipo, incluyendo desde entero. Por lo tanto, sólo puede llamarse si isTag() es verdadero; llamarla en cualquier otra condición es un error.

Las etiquetas son números de 64 bits que se adjuntan a los tipos CBOR genéricos para darles un significado adicional. Para obtener una lista de las etiquetas conocidas, consulte la enumeración QCborKnownTags.

Véase también isTag(), toInteger() y QCborKnownTags.

quint64 QCborStreamReader::toUnsignedInteger() const

Devuelve el valor entero sin signo del elemento actual.

Esta función no realiza ninguna conversión de tipo, incluyendo desde la etiqueta booleana o CBOR. Por lo tanto, sólo puede llamarse si isUnsignedInteger() es verdadero; llamarla en cualquier otra condición es un error.

Esta función puede utilizarse para obtener números fuera del rango del tipo de retorno de toInteger().

Véase también type(), toInteger(), isUnsignedInteger() y isNegativeInteger().

QCborStreamReader::Type QCborStreamReader::type() const

Devuelve el tipo del elemento actual. Es uno de los tipos válidos o Inválido.

Véase también isValid(), isUnsignedInteger(), isNegativeInteger(), isInteger(), isByteArray(), isString(), isArray(), isMap(), isTag(), isSimpleType(), isBool(), isFalse(), isTrue(), isNull(), isUndefined(), isFloat16(), isFloat(), y isDouble().

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