QCborStreamWriter Class
QCborStreamWriter 클래스는 단방향 스트림에서 작동하는 간단한 CBOR 인코더입니다. 더 보기...
| 헤더: | #include <QCborStreamWriter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
- 상속된 멤버를 포함한 모든 멤버 목록
- QCborStreamWriter는 Qt의 CBOR 지원 기능의 일부입니다.
참고: 이 클래스의 모든 함수는 재진입 가능합니다.
공개 함수
| QCborStreamWriter(QByteArray *data) | |
| QCborStreamWriter(QIODevice *device) | |
| QCborStreamWriter(const QCborStreamWriter &) | |
| ~QCborStreamWriter() | |
| void | append(QByteArrayView ba) |
| void | append(QCborKnownTags tag) |
| void | append(QCborNegativeInteger n) |
| void | append(QCborSimpleType st) |
| void | append(QCborTag tag) |
| void | append(QLatin1StringView str) |
| void | append(QStringView str) |
(since 6.10) void | append(QUtf8StringView str) |
| void | append(bool b) |
| void | append(const QByteArray &ba) |
| void | append(double d) |
| void | append(float f) |
| void | append(qfloat16 f) |
| void | append(qint64 i) |
| void | append(quint64 u) |
| void | append(std::nullptr_t) |
| void | append(const char *str, qsizetype size = -1) |
| void | appendByteString(const char *data, qsizetype len) |
| void | appendNull() |
| void | appendTextString(const char *utf8, qsizetype len) |
| void | appendUndefined() |
| QIODevice * | device() const |
| bool | endArray() |
| bool | endMap() |
| void | setDevice(QIODevice *device) |
| void | startArray() |
| void | startArray(quint64 count) |
| void | startMap() |
| void | startMap(quint64 count) |
| QCborStreamWriter & | operator=(const QCborStreamWriter &) |
상세 설명
이 클래스를 사용하면 CBOR 콘텐츠 스트림을 QByteArray 또는 QIODevice 로 직접 빠르게 인코딩할 수 있습니다. CBOR는 Concise Binary Object Representation의 약자로, JSON과 호환되는 매우 간결한 형태의 이진 데이터 인코딩 방식입니다. 이 형식은 IETF Constrained RESTful Environments(CoRE) WG에 의해 만들어졌으며, 많은 새로운 RFC에서 사용되고 있습니다. 이 형식은 CoAP 프로토콜과 함께 사용하도록 고안되었습니다.
QCborStreamWriter는 QXmlStreamWriter 와 유사한 StAX 스타일의 API를 제공합니다. 이 API는 다소 저수준이며 CBOR 인코딩에 대한 약간의 지식이 필요합니다. 더 간단한 API를 원하시면 QCborValue, 특히 QCborValue::toCbor() 인코딩 함수를 참조하십시오.
QCborStreamWriter의 일반적인 사용법은 대상 QByteArray 또는 QIODevice 에서 객체를 생성한 다음, 인코딩할 원하는 유형을 지정하여 append() 오버로드 중 하나를 호출하는 것입니다. 배열과 맵을 생성하기 위해 QCborStreamWriter는 startArray() 및 startMap() 오버로드를 제공하며, 이는 반드시 해당 endArray() 및 endMap() 함수로 종료되어야 합니다.
다음 예제는 다음 JSON 콘텐츠와 동등한 내용을 인코딩합니다:
{ "label": "journald", "autoDetect": false, "condition": "libs.journald", "output": [ "privateFeature" ] }
using namespace Qt::StringLiterals;
// ...
writer.startMap(4); // 4 elements in the map
writer.append("label"_L1);
writer.append("journald"_L1);
writer.append("autoDetect"_L1);
writer.append(false);
writer.append("condition"_L1);
writer.append("libs.journald"_L1);
writer.append("output"_L1);
writer.startArray(1);
writer.append("privateFeature"_L1);
writer.endArray();
writer.endMap();CBOR 지원
QCborStreamWriter는 표준(canonical) 및 엄격(strict) 스트림을 생성하는 데 필요한 모든 CBOR 기능을 지원합니다. 이 클래스는 RFC 7049에 명시된 기능의 거의 전부를 구현합니다.
다음 표에는 QCborStreamWriter가 지원하는 CBOR 기능이 나열되어 있습니다.
| 기능 | 지원 |
|---|---|
| 부호 없는 숫자 | 예 (전체 범위) |
| 음수 | 예 (전체 범위) |
| 바이트 문자열 | 예 |
| 텍스트 문자열 | 예 |
| 청크형 문자열 | 아니요 |
| 태그 | 예 (임의) |
| 부울 값 | 예 |
| Null | 예 |
| 정의되지 않음 | 예 |
| 임의의 단순 값 | 예 |
| 반정밀도 부동소수점(16비트) | 예 |
| 단정밀도 부동소수점 (32비트) | 예 |
| 이중 정밀도 부동 소수점 (64비트) | 예 |
| 무한대 및 NaN 부동소수점 | 예 |
| 길이 결정형 배열 및 맵 | 예 |
| 길이 미정의 배열 및 맵 | 예 |
| 문자열 및 정수 이외의 맵 키 유형 | 예 (임의) |
표준 CBOR 인코딩
정규화된 CBOR 인코딩은 RFC 7049의 3.9절에 정의되어 있습니다. 정규화된 인코딩은 Qt의 CBOR 디코딩 기능에 필수 요건은 아니지만, 일부 프로토콜에서는 요구될 수 있습니다. 특히, 동일한 스트림을 정확히 재현할 수 있는 기능을 요구하는 프로토콜의 경우 이 기능이 필요할 수 있습니다.
CBOR 스트림이 “정규”로 간주되려면 다음 요구 사항을 충족해야 합니다:
- 정수는 가능한 한 작아야 합니다. QCborStreamWriter는 항상 이를 준수합니다(사용자의 별도 조치가 필요하지 않으며, 지나치게 긴 정수를 기록할 수 없습니다).
- 배열, 맵 및 문자열의 길이는 가능한 한 짧아야 합니다. 위와 마찬가지로, QCborStreamWriter는 이를 자동으로 처리합니다.
- 배열, 맵 및 문자열은 명시적인 길이를 사용해야 합니다. QCborStreamWriter는 문자열의 경우 항상 이를 수행합니다. 배열과 맵의 경우, startArray() 및 startMap() 오버로드를 호출할 때 명시적인 길이를 반드시 지정해야 합니다.
- 모든 맵의 키는 오름차순으로 정렬되어야 합니다. QCborStreamWriter는 이 항목에 대해 어떠한 도움도 제공하지 않으므로, 개발자는 맵 쌍에 대해 append()을 호출하기 전에 이를 반드시 확인해야 합니다.
- 부동 소수점 값은 가능한 한 작아야 합니다. QCborStreamWriter는 부동 소수점 값을 변환하지 않으므로, append()을 호출하기 전에 개발자가 직접 이 검사를 수행해야 합니다(해당 함수의 예제 참조).
엄격한 CBOR 모드
엄격 모드는 RFC 7049의 3.10절에 정의되어 있습니다. 앞서 설명한 표준 인코딩과 마찬가지로, QCborStreamWriter는 엄격한 CBOR 스트림을 생성할 수 있게 해 주지만, 이를 필수로 요구하거나 출력이 엄격한 CBOR인지 검증하지는 않습니다.
- 맵의 키는 고유해야 합니다. QCborStreamWriter는 맵 키에 대한 유효성 검사를 수행하지 않습니다.
- 태그는 사양에 따라 올바른 유형과만 쌍을 이루어야 할 수 있습니다. QCborStreamWriter는 태그 사용에 대한 유효성 검사를 수행하지 않습니다.
- 텍스트 문자열은 올바르게 인코딩된 UTF-8이어야 합니다. QCborStreamWriter는 ` append()`를 통해 추가된 문자열에 대해서는 항상 올바른 UTF-8을 기록하지만, ` appendTextString()`를 통해 추가된 문자열에 대해서는 유효성 검사를 수행하지 않습니다.
잘못된 CBOR 스트림
QCborStreamWriter를 잘못 사용하여 수신자가 디코딩할 수 없는 잘못된 CBOR 스트림을 생성할 수도 있습니다. 다음의 작업은 잘못된 스트림을 생성합니다:
- 태그를 추가하고 해당 태그된 값을 추가하지 않는 경우(QCborStreamWriter는 오류 메시지를 표시하지 않음).
- 명시적인 길이가 지정된 배열이나 맵에 항목을 너무 많이 또는 너무 적게 추가하는 경우(endMap() 및 endArray()는 false를 반환하며, QCborStreamWriter는 qWarning()를 통해 로그를 기록합니다).
{CBOR 데이터 구문 분석 및 표시}, {직렬화 변환기}, {게임 저장 및 불러오기}
QCborStreamReader, QCborValue 및 QXmlStreamWriter도 참조하십시오 .
멤버 함수 문서
[explicit] QCborStreamWriter::QCborStreamWriter(QByteArray *data)
data 에 스트림을 추가할 QCborStreamWriter 객체를 생성합니다. 모든 스트리밍은 버퍼를 플러시할 필요 없이 바이트 배열로 즉시 수행됩니다.
다음 예제는 숫자를 바이트 배열에 기록한 후 이를 반환합니다.
QByteArray encodedNumber(qint64 value)
{
QByteArray ba;
QCborStreamWriter writer(&ba);
writer.append(value);
return ba;
}QCborStreamWriter는 data 에 대한 소유권을 가져가지 않습니다.
[explicit] QCborStreamWriter::QCborStreamWriter(QIODevice *device)
device 에 스트림을 기록할 QCborStreamWriter 객체를 생성합니다. 첫 번째 append() 호출을 수행하기 전에 해당 장치를 반드시 열어야 합니다. 이 생성자는 QFile, QProcess 또는 QTcpSocket 와 같이 QIODevice 에서 파생된 모든 클래스와 함께 사용할 수 있습니다.
QCborStreamWriter는 버퍼링 기능을 제공하지 않으므로, append()가 호출될 때마다 장치의 write() 메서드가 한 번 이상 호출됩니다.
다음 예제는 빈 맵을 파일에 기록합니다:
QFile f("output");
QCborStreamWriter writer(&f);
writer.startMap(0);
writer.endMap();QCborStreamWriter는 device 의 소유권을 인수하지 않습니다.
device() 및 setDevice()도 참조하십시오 .
[delete] QCborStreamWriter::QCborStreamWriter(const QCborStreamWriter &)
QCborStreamWriter 의 인스턴스를 복사 생성합니다. 이 함수는 삭제되었습니다.
[noexcept] QCborStreamWriter::~QCborStreamWriter()
이 QCborStreamWriter 객체를 소멸시키고, 관련 리소스를 모두 해제합니다.
QCborStreamWriter 이 메서드는 객체가 소멸되기 전에 필요한 모든 항목이 스트림에 기록되었는지 확인하는 오류 검사를 수행하지 않습니다. 이 작업이 완료되었는지 확인하는 것은 프로그래머의 책임입니다.
void QCborStreamWriter::append(QByteArrayView ba)
void QCborStreamWriter::append(const QByteArray &ba)
바이트 배열 ` ba `을 스트림에 추가하여 CBOR 바이트 문자열 값을 생성합니다. ` QCborStreamWriter `은 전체 문자열을 한 번에 한 청크로 쓰려고 시도합니다.
다음 예제는 파일의 내용을 불러와 스트림에 추가합니다:
void writeFile(QCborStreamWriter &writer, const QString &fileName)
{
QFile f(fileName);
if (f.open(QIODevice::ReadOnly))
writer.append(f.readAll());
}예제에서 볼 수 있듯이, JSON과 달리 CBOR는 바이너리 콘텐츠에 대해 이스케이프 처리가 필요하지 않습니다.
참고: QByteArrayView 를 인수로 받는 오버로드함수는 Qt 6.10부터 제공되었습니다.
appendByteString(), QCborStreamReader::isByteArray(), QCborStreamReader::readByteArray()도 참조하십시오 .
void QCborStreamWriter::append(QCborKnownTags tag)
스트림에 CBOR 태그 tag 를 추가하여 CBOR 태그 값을 생성합니다. 모든 태그 뒤에는 해당 태그가 의미를 부여하는 다른 유형이 반드시 따라와야 합니다.
다음 예제에서는 CBOR 태그 1(Unix time_t)과 time() 함수를 사용하여 얻은 현재 시간을 나타내는 정수를 스트림에 추가합니다.
void writeCurrentTime(QCborStreamWriter &writer)
{
writer.append(QCborKnownTags::UnixTime_t);
writer.append(qint64(time(nullptr)));
}이 함수는 오버로드된 함수입니다.
QCborStreamReader::isTag() 및 QCborStreamReader::toTag()도 참조하십시오 .
void QCborStreamWriter::append(QCborNegativeInteger n)
64비트 음수 값 n 을 CBOR 스트림에 추가합니다. QCborNegativeInteger는 기록하려는 음수의 절댓값을 저장하는 64비트 열거형입니다. n이 0인 경우, 기록되는 값은264 (즉, -18,446,744,073,709,551,616)와 동일합니다.
다음 예제에서는 -1,-232 및 INT64_MIN 값을 기록합니다:
writer.append(QCborNegativeInteger(1));
writer.append(QCborNegativeInteger(Q_INT64_C(4294967296)));
writer.append(QCborNegativeInteger(-quint64(std::numeric_limits<qint64>::min())));이 함수를 사용하여 qint64 와 같이 표준 컴퓨터의 64비트 부호 있는 정수 범위를 벗어난 숫자를 인코딩할 수 있다는 점에 유의하십시오. 즉, n 가 std::numeric_limits<qint64>::max() 보다 크거나 0인 경우, 이는 std::numeric_limits<qint64>::min() 보다 작은 음수를 나타냅니다.
이 함수는 오버로드된 함수입니다.
QCborStreamReader::isNegativeInteger() 및 QCborStreamReader::toNegativeInteger()도 참조하십시오 .
void QCborStreamWriter::append(QCborSimpleType st)
st 라는 CBOR 단순 유형을 스트림에 추가하여 CBOR 단순 유형 값을 생성합니다. 다음 예제에서는 Null에 대한 단순 유형과 Qt XML에서 지원하지 않는 유형 32에 대한 단순 유형을 작성합니다.
writer.append(QCborSimpleType::Null);
writer.append(QCborSimpleType(32));참고: 사양이 정의되지 않은 단순 유형을사용하면 원격 수신 측에서 유효성 검사 오류가 발생할 수 있습니다. 또한, 단순 유형 값 24부터 31까지(해당 값 포함)는 예약되어 있으므로 사용해서는 안 됩니다.
이 함수는 오버로드된 함수입니다.
QCborStreamReader::isSimpleType() 및 QCborStreamReader::toSimpleType()도 참조하십시오 .
void QCborStreamWriter::append(QCborTag tag)
스트림에 CBOR 태그 ‘ tag ’을 추가하여 CBOR 태그 값을 생성합니다. 모든 태그 뒤에는 해당 태그가 의미를 부여하는 다른 유형이 반드시 따라와야 합니다.
다음 예제에서는 CBOR 태그 36(정규 표현식)과 QRegularExpression 의 패턴을 스트림에 추가합니다.
void writeRxPattern(QCborStreamWriter &writer, const QRegularExpression &rx)
{
writer.append(QCborTag(36));
writer.append(rx.pattern());
}이 함수는 오버로드된 함수입니다.
QCborStreamReader::isTag() 및 QCborStreamReader::toTag()도 참조하십시오 .
void QCborStreamWriter::append(QLatin1StringView str)
str 에서 인식한 Latin-1 문자열을 스트림에 추가하여 CBOR 텍스트 문자열 값을 생성합니다. ` QCborStreamWriter `는 문자열 전체를 하나의 청크로 한 번에 쓰려고 시도합니다.
다음 예제는 간단한 Latin-1 문자열 리터럴을 스트림에 추가합니다:
using namespace Qt::StringLiterals;
// ...
writer.append("Hello, World"_L1);성능 관련 참고 사항: CBOR에서는 모든 텍스트 문자열이 UTF-8로 인코딩되어야 하므로, 이 함수는 문자열 내의 문자를 하나씩 순회하며 내용이 US-ASCII인지 여부를 확인합니다. 문자열에 US-ASCII 범위를 벗어난 문자가 포함된 것으로 확인되면, 메모리를 할당하여 UTF-8로 변환합니다. 이러한 검사가 필요하지 않은 경우, 대신 appendTextString()을 사용하거나 QUtf8StringView 을 인수로 받는 오버로드된 함수를 사용하십시오.
이 함수는 오버로드된 함수입니다.
QCborStreamReader::isString() 및 QCborStreamReader::readString()도 참조하십시오 .
void QCborStreamWriter::append(QStringView str)
str 라는 텍스트 문자열을 스트림에 추가하여 CBOR 텍스트 문자열 값을 생성합니다. ` QCborStreamWriter `는 전체 문자열을 하나의 청크로 한 번에 쓰려고 시도합니다.
다음 예제는 임의의 QString 을 스트림에 기록합니다:
void writeString(QCborStreamWriter &writer, const QString &str)
{
writer.append(str);
}이 함수는 오버로드된 함수입니다.
QCborStreamReader::isString() 및 QCborStreamReader::readString()도 참조하십시오 .
[since 6.10] void QCborStreamWriter::append(QUtf8StringView str)
str 에서 표시된 UTF-8 문자열을 스트림에 추가하여 CBOR 텍스트 문자열 값을 생성합니다. ` QCborStreamWriter `는 전체 문자열을 하나의 청크로 한 번에 쓰려고 시도합니다.
이 함수는 오버로드된 함수입니다.
이 함수는 Qt 6.10에서 도입되었습니다.
appendTextString(), QCborStreamReader::isString() 및 QCborStreamReader::readString()도 참조하십시오 .
void QCborStreamWriter::append(bool b)
부울 값 ` b `을 스트림에 추가하여 CBOR False 값 또는 CBOR True 값을 생성합니다. 이 함수는 다음과 동일하며(다음과 같이 구현됨):
writer.append(b ? QCborSimpleType::True : QCborSimpleType::False);이 함수는 오버로드된 함수입니다.
appendNull(), appendUndefined(), QCborStreamReader::isBool(), QCborStreamReader::toBool()도 참조하십시오 .
void QCborStreamWriter::append(double d)
d 라는 부동소수점 숫자를 스트림에 추가하여 CBOR 64비트 이중 정밀도 부동소수점 값을 생성합니다. ` QCborStreamWriter `는 숫자를 항상 있는 그대로 추가하며, 해당 숫자가 NaN의 표준 형식인지, 무한대인지, 비정규형인지, 또는 더 짧은 형식으로 표기될 수 있는지 여부에 대한 검사는 수행하지 않습니다.
다음 코드는 비정규 수에 대한 검사를 제외하고는 이러한 모든 검사를 수행합니다. 비정규 수에 대한 검사는 시스템 FPU나 부동소수점 에뮬레이션이 직접 처리할 것으로 예상됩니다.
void writeDouble(QCborStreamWriter &writer, double d)
{
float f;
if (qIsNaN(d)) {
writer.append(qfloat16(qQNaN()));
} else if (qIsInf(d)) {
writer.append(d < 0 ? -qInf() : qInf());
} else if ((f = d) == d) {
qfloat16 f16 = qfloat16(f);
if (f16 == f)
writer.append(f16);
else
writer.append(f);
} else {
writer.append(d);
}
}double 형을 정밀도 손실 없이 정수형으로 변환할 수 있는지 여부를 판단하는 것은 독자의 연습 문제로 남겨둡니다.
이 함수는 오버로드된 함수입니다.
QCborStreamReader::isDouble() 및 QCborStreamReader::toDouble()도 참조하십시오 .
void QCborStreamWriter::append(float f)
f 라는 부동소수점 숫자를 스트림에 추가하여 CBOR 32비트 단정밀도 부동소수점 값을 생성합니다. 다음 코드를 사용하면, 정밀도 손실이 없는 경우 C++의 ` double `를 ` float `로 변환하여 추가하거나, 대신 ` double`를 추가할 수 있습니다.
void writeFloat(QCborStreamWriter &writer, double d)
{
float f = d;
if (qIsNaN(d) || d == f)
writer.append(f);
else
writer.append(d);
}이 함수는 오버로드된 함수입니다.
QCborStreamReader::isFloat() 및 QCborStreamReader::toFloat()도 참조하십시오 .
void QCborStreamWriter::append(qfloat16 f)
f 라는 부동소수점 숫자를 스트림에 추가하여 CBOR 16비트 반정밀도 부동소수점 값을 생성합니다. 다음 코드는 정밀도 손실이 없는 경우 C++의 ` float `를 ` qfloat16 `로 변환하여 추가하거나, 대신 ` float`를 추가하는 데 사용할 수 있습니다.
void writeFloat(QCborStreamWriter &writer, float f)
{
qfloat16 f16 = qfloat16(f);
if (qIsNaN(f) || f16 == f)
writer.append(f16);
else
writer.append(f);
}이 함수는 오버로드된 함수입니다.
QCborStreamReader::isFloat16() 및 QCborStreamReader::toFloat16()도 참조하십시오 .
void QCborStreamWriter::append(qint64 i)
64비트 부호 있는 값 i 을 CBOR 스트림에 추가합니다. 이 함수는 매개변수의 부호에 따라 CBOR Unsigned Integer 또는 CBOR NegativeInteger 값을 생성합니다. 다음 예제에서는 0, -1,232 및 INT64_MAX 값을 기록합니다:
writer.append(0);
writer.append(-1);
writer.append(Q_INT64_C(4294967296));
writer.append(std::numeric_limits<qint64>::max());이 함수는 오버로드된 함수입니다.
QCborStreamReader::isInteger() 및 QCborStreamReader::toInteger()도 참조하십시오 .
void QCborStreamWriter::append(quint64 u)
u 라는 64비트 부호 없는 값을 CBOR 스트림에 추가하여 CBOR 부호 없는 정수 값을 생성합니다. 다음 예제에서는 0,232 및 UINT64_MAX 값을 기록합니다:
writer.append(0U);
writer.append(Q_UINT64_C(4294967296));
writer.append(std::numeric_limits<quint64>::max());이 함수는 오버로드된 함수입니다.
QCborStreamReader::isUnsignedInteger() 및 QCborStreamReader::toUnsignedInteger()도 참조하십시오 .
void QCborStreamWriter::append(std::nullptr_t)
스트림에 CBOR Null 값을 추가합니다. 이 함수는 다음과 동일하며(다음과 같이 구현됨): 매개변수는 무시됩니다.
writer.append(QCborSimpleType::Null);이 함수는 오버로드된 함수입니다.
appendNull(), append(QCborSimpleType) 및 QCborStreamReader::isNull()도 참조하십시오 .
void QCborStreamWriter::append(const char *str, qsizetype size = -1)
str 부터 시작하는 size 바이트 분량의 텍스트를 스트림에 추가하여 CBOR 텍스트 문자열 값을 생성합니다. QCborStreamWriter 는 전체 문자열을 하나의 청크로 쓰려고 시도합니다. size 가 -1인 경우, 이 함수는 strlen(\a str) 바이트를 씁니다.
str 가 가리키는 문자열은 올바르게 UTF-8로 인코딩되어 있어야 합니다. QCborStreamWriter 는 이 조건이 충족되는지 검증하지 않습니다.
이 함수는 오버로드된 함수입니다.
append(QLatin1StringView), append(QStringView), QCborStreamReader::isString() 및 QCborStreamReader::readString()도 참조하십시오 .
void QCborStreamWriter::appendByteString(const char *data, qsizetype len)
data 부터 시작하는 len 바이트의 데이터를 스트림에 추가하여 CBOR 바이트 문자열 값을 생성합니다. ` QCborStreamWriter `는 전체 문자열을 하나의 청크로 한 번에 쓰려고 시도합니다.
append(), appendTextString(), QCborStreamReader::isByteArray(), QCborStreamReader::readByteArray()도 참조하십시오 .
void QCborStreamWriter::appendNull()
스트림에 CBOR Null 값을 추가합니다. 이 함수는 다음 함수와 동일하며(다음 함수로 구현됨):
writer.append(QCborSimpleType::Null);append(std::nullptr_t), append(QCborSimpleType) 및 QCborStreamReader::isNull()도 참조하십시오 .
void QCborStreamWriter::appendTextString(const char *utf8, qsizetype len)
utf8 부터 시작하는 len 바이트 분량의 텍스트를 스트림에 추가하여 CBOR 텍스트 문자열 값을 생성합니다. ` QCborStreamWriter `는 전체 문자열을 하나의 청크로 한 번에 쓰려고 시도합니다.
utf8 가 가리키는 문자열은 올바르게 UTF-8로 인코딩되어 있어야 합니다. QCborStreamWriter 는 이 조건이 충족되는지 유효성 검사를 수행하지 않습니다.
append(QLatin1StringView), append(QStringView), QCborStreamReader::isString(), QCborStreamReader::readString()도 참조하십시오 .
void QCborStreamWriter::appendUndefined()
스트림에 CBOR 미정의 값을 추가합니다. 이 함수는 다음 함수와 동일하며(다음 함수로 구현됨):
writer.append(QCborSimpleType::Undefined);append(QCborSimpleType) 및 QCborStreamReader::isUndefined()도 참조하십시오 .
QIODevice *QCborStreamWriter::device() const
이 QCborStreamWriter 객체가 쓰기 작업을 수행 중인 QIODevice 를 반환합니다. 해당 디바이스는 미리 생성자나 setDevice()를 통해 설정되어 있어야 합니다.
이 객체가 QByteArray 에 쓰기를 통해 생성된 경우, 이 함수는 QCborStreamWriter 가 소유하는 QBuffer 의 내부 인스턴스를 반환합니다.
setDevice()도 참조하십시오 .
bool QCborStreamWriter::endArray()
startArray()의 오버로드 중 하나로 생성된 배열을 종료하며, 배열에 올바른 수의 요소가 추가된 경우 true를 반환합니다. 이 함수는 startArray()이 사용될 때마다 호출되어야 합니다.
false가 반환되면 애플리케이션에 오류가 발생했거나 이 스트림에서 복구 불가능한 오류가 발생한 것을 의미합니다. 이 경우 QCborStreamWriter 는 qWarning()를 사용하여 경고도 출력합니다.
현재 컨테이너가 배열이 아닌 상태에서 이 함수를 호출하는 것도 오류이지만, 현재 QCborStreamWriter 는 이 조건을 감지할 수 없습니다.
startArray(), startArray(quint64) 및 endMap()도 참조하십시오 .
bool QCborStreamWriter::endMap()
startMap()의 오버로드 중 하나로 시작된 맵을 종료하며, 배열에 올바른 수의 요소가 추가된 경우 true를 반환합니다. 이 함수는 사용된 모든 startMap()에 대해 호출되어야 합니다.
false가 반환되면 애플리케이션에 오류가 발생했거나 이 스트림에서 복구 불가능한 오류가 발생했음을 나타냅니다. 이 경우 ` QCborStreamWriter `은 ` qWarning()`을 사용하여 경고도 출력합니다.
현재 컨테이너가 맵이 아닌 상태에서 이 함수를 호출하는 것도 오류이지만, QCborStreamWriter 는 현재 이 조건을 감지할 수 없습니다.
startMap(), startMap(quint64) 및 endArray()도 참조하십시오 .
void QCborStreamWriter::setDevice(QIODevice *device)
이 ` QCborStreamWriter ` 객체가 쓰기를 수행 중인 디바이스 또는 바이트 배열을 ` device`로 대체합니다.
device()도 참조하십시오 .
void QCborStreamWriter::startArray()
CBOR 스트림에서 길이가 정해지지 않은 CBOR 배열을 시작합니다. 각 startArray() 호출은 하나의 endArray() 호출과 짝을 이루어야 하며, 현재 CBOR 요소는 배열의 끝까지 확장됩니다.
이 함수로 생성된 배열에는 명시적인 길이가 없습니다. 대신, 배열에 포함된 요소들에 의해 길이가 암시적으로 결정됩니다. 단, 길이가 정해지지 않은 배열을 사용하는 것은 표준 CBOR 인코딩을 준수하지 않는다는 점에 유의하십시오.
다음 예제는 입력으로 전달된 문자열 목록의 요소들을 끝에 추가합니다:
void appendList(QCborStreamWriter &writer, const QList<QString> &values)
{
writer.startArray();
for (const QString &s : values)
writer.append(s);
writer.endArray();
}startArray(quint64), endArray(), startMap(), QCborStreamReader::isArray() 및 QCborStreamReader::isLengthKnown()도 참조하십시오 .
void QCborStreamWriter::startArray(quint64 count)
CBOR 스트림에 count 개의 항목으로 명시된 길이를 가진 CBOR 배열을 시작합니다. 각 startArray 호출은 하나의 endArray() 호출과 쌍을 이루어야 하며, 현재 CBOR 요소는 배열의 끝까지 확장됩니다.
이 함수로 생성된 배열은 명시적인 길이를 가지므로, CBOR 스트림에 정확히 count 개의 항목이 추가되어야 합니다. 이보다 적거나 많은 항목을 추가하면 endArray() 호출 중에 오류가 발생하고 CBOR 스트림이 손상됩니다. 그러나 명시적 길이의 배열은 표준 CBOR 인코딩에서 필수로 요구됩니다.
다음 예제는 입력으로 전달된 QStringList 에 포함된 모든 문자열을 끝에 추가합니다:
void appendList(QCborStreamWriter &writer, const QStringList &list)
{
writer.startArray(list.size());
for (const QString &s : list)
writer.append(s);
writer.endArray();
}크기 제한: 이 함수의 매개변수는 quint64이므로, 배열에 최대2⁶⁴-1개의 요소를 포함할 수 있을 것으로 보입니다. 그러나 QCborStreamWriter 와 QCborStreamReader 는 현재 32비트 시스템에서는2³²-2개, 64비트 시스템에서는2⁶⁴-2개로 제한됩니다. 또한 QCborArray 는 현재 32비트 플랫폼에서는227개 요소, 64비트 플랫폼에서는259개 요소로 제한된다는 점에 유의하십시오.
이 함수는 오버로드된 함수입니다.
startArray(), endArray(), startMap(), QCborStreamReader::isArray() 및 QCborStreamReader::isLengthKnown()도 참조하십시오 .
void QCborStreamWriter::startMap()
CBOR 스트림에서 길이가 정해지지 않은 CBOR 맵을 시작합니다. 각 startMap() 호출은 하나의 endMap() 호출과 짝을 이루어야 하며, 현재 CBOR 요소는 맵의 끝까지 확장됩니다.
이 함수로 생성된 맵에는 명시적인 길이가 없습니다. 대신, 맵에 포함된 요소들에 의해 길이가 암시적으로 결정됩니다. 그러나 길이가 불확실한 맵을 사용하는 것은 표준 CBOR 인코딩을 준수하지 않는다는 점에 유의하십시오(표준 인코딩에서는 키가 고유하고 정렬된 순서여야 합니다).
다음 예제는 입력으로 전달된 int와 string 쌍의 목록에 있는 요소들을 맵 끝에 추가합니다.
void appendMap(QCborStreamWriter &writer, const QList<std::pair<int, QString>> &values)
{
writer.startMap();
for (const auto pair : values) {
writer.append(pair.first);
writer.append(pair.second);
}
writer.endMap();
}startMap(quint64), endMap(), startArray(), QCborStreamReader::isMap(), QCborStreamReader::isLengthKnown()도 참조하십시오 .
void QCborStreamWriter::startMap(quint64 count)
CBOR 스트림에 count 개의 항목으로 구성된 명시적 길이의 CBOR 맵을 시작합니다. 각 startMap 호출은 하나의 endMap() 호출과 쌍을 이루어야 하며, 현재 CBOR 요소는 맵의 끝까지 확장됩니다.
이 함수로 생성된 맵은 명시적인 길이를 가지므로, 정확히 count 쌍의 항목이 CBOR 스트림에 추가되어야 합니다. 이보다 적거나 많은 항목을 추가하면 endMap() 호출 중에 오류가 발생하고 CBOR 스트림이 손상됩니다. 그러나 명시적 길이의 맵은 표준 CBOR 인코딩에서 필수로 요구됩니다.
다음 예제는 입력으로 전달된 QMap 에 포함된 모든 문자열을 추가합니다:
void appendMap(QCborStreamWriter &writer, const QMap<int, QString> &map)
{
writer.startMap(map.size());
for (auto it = map.cbegin(), end = map.cend(); it != end; ++it) {
writer.append(it.key());
writer.append(it.value());
}
writer.endMap();
}크기 제한: 이 함수의 매개변수는 quint64이므로, 맵에 최대2⁶⁴-1개의 쌍을 포함할 수 있을 것으로 보입니다. 그러나 QCborStreamWriter 와 QCborStreamReader 는 현재 32비트 시스템에서는2³¹-1개, 64비트 시스템에서는2⁶³-1개로 제한됩니다. 또한 QCborMap 는 현재 32비트 플랫폼에서는2²²⁶개, 64비트 플랫폼에서는2²⁵⁸개로 제한된다는 점에 유의하십시오.
이 함수는 오버로드된 함수입니다.
startMap(), endMap(), startArray(), QCborStreamReader::isMap() 및 QCborStreamReader::isLengthKnown()도 참조하십시오 .
[delete] QCborStreamWriter &QCborStreamWriter::operator=(const QCborStreamWriter &)
other 를 이 QCborStreamWriter 인스턴스에 복사-할당합니다. 이 함수는 삭제됩니다.
© 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.