QDataStream Class

QDataStream 클래스는 이진 데이터의 직렬화를 QIODevice. .. 더 보기....

헤더: #include <QDataStream>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속합니다: QIODeviceBase

참고: 이 클래스의 모든 함수는 재상속됩니다.

공용 유형

enum ByteOrder { BigEndian, LittleEndian }
enum FloatingPointPrecision { SinglePrecision, DoublePrecision }
enum Status { Ok, ReadPastEnd, ReadCorruptData, WriteFailed, SizeLimitExceeded }
enum Version { Qt_1_0, Qt_2_0, Qt_2_1, Qt_3_0, Qt_3_1, …, Qt_6_8 }

공용 함수

QDataStream()
QDataStream(QIODevice *d)
QDataStream(const QByteArray &a)
QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode)
~QDataStream()
void abortTransaction()
bool atEnd() const
QDataStream::ByteOrder byteOrder() const
bool commitTransaction()
QIODevice *device() const
QDataStream::FloatingPointPrecision floatingPointPrecision() const
(since 6.7) QDataStream &readBytes(char *&s, qint64 &l)
(until 6.11) QDataStream &readBytes(char *&s, uint &l)
qint64 readRawData(char *s, qint64 len)
void resetStatus()
void rollbackTransaction()
void setByteOrder(QDataStream::ByteOrder bo)
void setDevice(QIODevice *d)
void setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision)
void setStatus(QDataStream::Status status)
void setVersion(int v)
qint64 skipRawData(qint64 len)
void startTransaction()
QDataStream::Status status() const
int version() const
QDataStream &writeBytes(const char *s, qint64 len)
qint64 writeRawData(const char *s, qint64 len)
QDataStream &operator<<(qint8 i)
QDataStream &operator<<(bool i)
(since 6.0) QDataStream &operator<<(char16_t c)
(since 6.0) QDataStream &operator<<(char32_t c)
QDataStream &operator<<(const char *s)
QDataStream &operator<<(double f)
QDataStream &operator<<(float f)
QDataStream &operator<<(qint16 i)
QDataStream &operator<<(qint32 i)
QDataStream &operator<<(qint64 i)
QDataStream &operator<<(quint16 i)
QDataStream &operator<<(quint32 i)
QDataStream &operator<<(quint64 i)
QDataStream &operator<<(quint8 i)
QDataStream &operator<<(std::nullptr_t ptr)
QDataStream &operator>>(bool &i)
QDataStream &operator>>(qint8 &i)
QDataStream &operator>>(char *&s)
(since 6.0) QDataStream &operator>>(char16_t &c)
(since 6.0) QDataStream &operator>>(char32_t &c)
QDataStream &operator>>(double &f)
QDataStream &operator>>(float &f)
QDataStream &operator>>(qint16 &i)
QDataStream &operator>>(qint32 &i)
QDataStream &operator>>(qint64 &i)
QDataStream &operator>>(quint16 &i)
QDataStream &operator>>(quint32 &i)
QDataStream &operator>>(quint64 &i)
QDataStream &operator>>(quint8 &i)
QDataStream &operator>>(std::nullptr_t &ptr)
(since 6.0) QDataStream &operator<<(QDataStream &out, const std::pair<T1, T2> &pair)
(since 6.0) QDataStream &operator>>(QDataStream &in, std::pair<T1, T2> &pair)

상세 설명

데이터 스트림은 호스트 컴퓨터의 운영 체제, CPU 또는 바이트 순서와 100% 독립적인 인코딩된 정보의 바이너리 스트림입니다. 예를 들어, Windows를 사용하는 PC에서 작성된 데이터 스트림은 Solaris를 실행하는 Sun SPARC에서 읽을 수 있습니다.

데이터 스트림을 사용하여 raw unencoded binary data 을 읽거나 쓸 수도 있습니다. "파싱" 입력 스트림이 필요한 경우 QTextStream 을 참조하세요.

QDataStream 클래스는 char, short, int, char * 등과 같은 C++의 기본 데이터 타입의 직렬화를 구현합니다. 보다 복잡한 데이터의 직렬화는 데이터를 기본 단위로 분할하여 수행합니다.

데이터 스트림은 QIODevice 와 긴밀하게 협력합니다. QIODevice 은 데이터를 읽고 쓸 수 있는 입력/출력 매체를 나타냅니다. QFile 클래스는 입출력 장치의 예시입니다.

예시(스트림에 바이너리 데이터 쓰기):

QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);   // we will serialize the data into the file
out << QString("the answer is");   // serialize a string
out << (qint32)42;        // serialize an integer

예제(스트림에서 바이너리 데이터 읽기):

QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);    // read the data serialized from the file
QString str;
qint32 a;
in >> str >> a;           // extract "the answer is" and 42

스트림에 기록되는 각 항목은 항목 유형에 따라 달라지는 미리 정의된 바이너리 형식으로 기록됩니다. 지원되는 Qt 유형에는 QBrush, QColor, QDateTime, QFont, QPixmap, QString, QVariant 등이 있습니다. 데이터 스트리밍을 지원하는 모든 Qt 타입의 전체 목록은 Qt 데이터 타입 직렬화하기를 참조하세요.

정수의 경우 항상 Qt 정수 타입으로 캐스팅하여 쓰고, 동일한 Qt 정수 타입으로 다시 읽는 것이 가장 좋습니다. 이렇게 하면 원하는 크기의 정수를 얻을 수 있고 컴파일러와 플랫폼의 차이로부터 자유로울 수 있습니다.

열거형은 스트리밍 연산자를 수동으로 정의할 필요 없이 QDataStream을 통해 직렬화할 수 있습니다. 열거형 클래스는 선언된 크기를 사용하여 직렬화됩니다.

초기 I/O 장치는 일반적으로 생성자에서 설정되지만 setDevice()를 사용하여 변경할 수 있습니다. 데이터의 끝에 도달했거나 설정된 I/O 장치가 없는 경우 atEnd()는 참을 반환합니다.

컨테이너 및 문자열 직렬화하기

직렬화 형식은 먼저 길이 지정자를 지정한 다음 l 바이트의 데이터를 지정합니다. 길이 지정자는 버전이 6.7 미만이거나 요소 수가 0xfffffffe(2^32 -2) 미만인 경우 1 퀸트32입니다. 그렇지 않으면 확장 값 0xfffffffe 뒤에 실제 값으로 하나의 퀸트64가 있습니다. 또한 isNull()을 지원하는 컨테이너의 경우, 모든 비트가 설정되고 데이터가 없는 단일 퀸트32로 인코딩됩니다.

한 가지 예를 들어 문자열 크기가 32비트에 맞는 경우 char * 문자열은 '\0' 바이트를 포함한 문자열 길이와 동일한 32비트 정수로 작성되고, 그 뒤에 '\0' 바이트를 포함한 문자열의 모든 문자가 이어집니다. 문자열 크기가 더 크면 확장된 크기의 마커로 0xffffffffe 값이 기록되고 그 뒤에 실제 크기의 64비트가 기록됩니다. char * 문자열을 읽을 때는 4바이트가 먼저 읽혀집니다. 값이 0xffffffffe(확장 크기 마커)와 같지 않으면 이 4바이트가 문자열의 32비트 크기로 처리됩니다. 그렇지 않으면 다음 8바이트가 읽혀져 64비트 크기의 문자열로 처리됩니다. 그러면 '\0' 종결자를 포함하여 char * 문자열의 모든 문자가 읽혀집니다.

버전 관리

QDataStream의 바이너리 형식은 Qt 1.0부터 발전해 왔으며, Qt의 변경 사항을 반영하기 위해 계속 발전할 가능성이 높습니다. 복잡한 유형을 입력하거나 출력할 때는 읽기 및 쓰기에 동일한 버전의 스트림(version())이 사용되는지 확인하는 것이 매우 중요합니다. 이전 버전과 호환성이 모두 필요한 경우 애플리케이션에서 버전 번호를 하드코딩할 수 있습니다:

stream.setVersion(QDataStream::Qt_4_0);

애플리케이션에서 생성한 문서의 파일 형식과 같은 새로운 바이너리 데이터 형식을 생성하는 경우, QDataStream을 사용하여 이식 가능한 형식으로 데이터를 작성할 수 있습니다. 일반적으로 매직 문자열과 버전 번호가 포함된 간단한 헤더를 작성하여 향후 확장을 위한 공간을 확보합니다. 예를 들어

QFile file("file.xxx");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);

// Write a header with a "magic number" and a version
out << (quint32)0xA0B0C0D0;
out << (qint32)123;

out.setVersion(QDataStream::Qt_4_0);

// Write the data
out << lots_of_interesting_data;

그런 다음 다음과 같이 읽습니다:

QFile file("file.xxx");
file.open(QIODevice::ReadOnly);
QDataStream in(&file);

// Read and check the header
quint32 magic;
in >> magic;
if (magic != 0xA0B0C0D0)
    return XXX_BAD_FILE_FORMAT;

// Read the version
qint32 version;
in >> version;
if (version < 100)
    return XXX_BAD_FILE_TOO_OLD;
if (version > 123)
    return XXX_BAD_FILE_TOO_NEW;

if (version <= 110)
    in.setVersion(QDataStream::Qt_3_2);
else
    in.setVersion(QDataStream::Qt_4_0);

// Read the data
in >> lots_of_interesting_data;
if (version >= 120)
    in >> data_new_in_XXX_version_1_2;
in >> other_interesting_data;

데이터를 직렬화할 때 사용할 바이트 순서를 선택할 수 있습니다. 기본 설정은 빅엔디안(MSB 우선)입니다. 리틀 엔디안으로 변경하면 이식성이 깨집니다(리더도 리틀 엔디안으로 변경하지 않는 한). 특별한 요구 사항이 없는 한 이 설정을 유지하는 것이 좋습니다.

원시 바이너리 데이터 읽기 및 쓰기

데이터 스트림에서 직접 원시 바이너리 데이터를 읽거나 쓰고 싶을 수 있습니다. readRawData ()을 사용하여 데이터를 스트림에서 미리 할당된 char * 으로 읽을 수 있습니다. 마찬가지로 writeRawData()를 사용하여 데이터를 스트림에 쓸 수 있습니다. 데이터의 인코딩/디코딩은 사용자가 직접 수행해야 한다는 점에 유의하세요.

비슷한 함수 쌍으로는 readBytes() 및 writeBytes()가 있습니다. 이 함수는 원시 함수와 다음과 같은 차이점이 있습니다: readBytes()는 읽을 데이터의 길이로 간주되는 퀸트32를 읽은 다음 해당 바이트 수를 미리 할당된 char * 으로 읽고, writeBytes()는 데이터의 길이가 포함된 퀸트32를 쓴 다음 데이터를 씁니다. 데이터의 인코딩/디코딩(길이 퀸트32를 제외한)은 사용자가 직접 수행해야 한다는 점에 유의하세요.

Qt 컬렉션 클래스 읽기 및 쓰기

Qt 컨테이너 클래스도 QDataStream으로 직렬화할 수 있습니다. 여기에는 QList, QSet, QHash, QMap 이 포함됩니다. 스트림 연산자는 클래스의 비 멤버로 선언됩니다.

다른 Qt 클래스 읽기 및 쓰기

여기에 문서화된 오버로드된 스트림 연산자 외에도, QDataStream에 직렬화하려는 모든 Qt 클래스에는 클래스의 비 멤버로 선언된 적절한 스트림 연산자가 있습니다:

QDataStream &operator<<(QDataStream &, const QXxx &);
QDataStream &operator>>(QDataStream &, QXxx &);

예를 들어, 다음은 QImage 클래스의 비 멤버로 선언된 스트림 연산자입니다:

QDataStream &operator<<(QDataStream &stream, const QImage &image);
QDataStream &operator>>(QDataStream &stream, QImage &image);

즐겨 사용하는 Qt 클래스에 유사한 스트림 연산자가 정의되어 있는지 확인하려면 클래스 문서 페이지의 관련 비회원 섹션을 확인하세요.

읽기 트랜잭션 사용

데이터 스트림이 비동기 장치에서 작동할 때 데이터 청크는 임의의 시점에 도착할 수 있습니다. QDataStream 클래스는 일련의 스트림 연산자를 사용하여 데이터를 원자적으로 읽을 수 있는 기능을 제공하는 트랜잭션 메커니즘을 구현합니다. 예를 들어, readyRead() 신호에 연결된 슬롯에서 트랜잭션을 사용하여 소켓에서 불완전한 읽기를 처리할 수 있습니다:

in.startTransaction();
QString str;
qint32 a;
in >> str >> a; // try to read packet atomically

if (!in.commitTransaction())
    return;     // wait for more data

전체 패킷이 수신되지 않으면 이 코드는 스트림을 초기 위치로 복원하고, 그 후 더 많은 데이터가 도착할 때까지 기다려야 합니다.

손상 및 보안

QDataStream은 손상된 데이터 입력에 대해 복원력이 없으므로 트랜잭션을 사용하는 경우에도 보안에 민감한 상황에서는 사용해서는 안 됩니다. 트랜잭션은 현재 비동기 장치에서 사용 가능한 데이터로 유효한 입력을 디코딩할 수 있는지 확인하는 데 도움이 되지만, 사용 가능한 데이터가 올바르게 형성되었다고 가정합니다.

또한 많은 QDataStream 디마샬링 연산자는 스트림에서 찾은 정보를 기반으로 메모리를 할당합니다. 이러한 연산자는 요청된 메모리 양이 합리적인지 또는 스트림에서 사용 가능한 데이터 양과 호환되는지에 대한 검증을 수행하지 않습니다(예: QByteArray 또는 QString 을 디마샬링하면 몇 기가바이트의 데이터 할당 요청이 표시될 수 있음).

출처를 신뢰할 수 없는 콘텐츠에는 QDataStream을 사용해서는 안 됩니다. 애플리케이션은 최소한 애플리케이션 자체 또는 해당 플러그인의 출처만큼 신뢰할 수 있는 스트림만 디코딩하도록 설계해야 합니다.

QTextStreamQVariant참조하세요 .

회원 유형 문서

enum QDataStream::ByteOrder

데이터 읽기/쓰기에 사용되는 바이트 순서입니다.

Constant설명
QDataStream::BigEndianQSysInfo::BigEndian최상위 바이트 우선(기본값)
QDataStream::LittleEndianQSysInfo::LittleEndian최하위 바이트 먼저

enum QDataStream::FloatingPointPrecision

데이터 읽기/쓰기에 사용되는 부동 소수점 숫자의 정밀도입니다. 데이터 스트림의 버전이 Qt_4_6 이상인 경우에만 영향을 미칩니다.

경고: 부동 소수점 정밀도는 데이터를 쓰는 객체와 데이터 스트림을 읽는 객체에서 동일한 값으로 설정해야 합니다.

상수설명
QDataStream::SinglePrecision0데이터 스트림의 모든 부동 소수점 숫자는 32비트 정밀도를 갖습니다.
QDataStream::DoublePrecision1데이터 스트림의 모든 부동 소수점 숫자는 64비트 정밀도를 갖습니다.

setFloatingPointPrecision() 및 floatingPointPrecision()도 참조하세요 .

enum QDataStream::Status

이 열거형은 데이터 스트림의 현재 상태를 설명합니다.

Constant설명
QDataStream::Ok0데이터 스트림이 정상적으로 작동 중입니다.
QDataStream::ReadPastEnd1데이터 스트림이 기본 디바이스의 데이터 끝을 지나서 읽었습니다.
QDataStream::ReadCorruptData2데이터 스트림이 손상된 데이터를 읽었습니다.
QDataStream::WriteFailed3데이터 스트림이 기본 장치에 쓸 수 없습니다.
QDataStream::SizeLimitExceeded (since Qt 6.7)4데이터 스트림의 크기가 현재 플랫폼에서 지원하는 크기보다 커서 데이터를 읽거나 쓸 수 없습니다. 예를 들어 32비트 플랫폼에서 2기가바이트 이상의 데이터를 읽으려고 할 때 이런 문제가 발생할 수 있습니다.

enum QDataStream::Version

이 열거형은 데이터 직렬화 형식 버전 번호에 대한 기호 동의어를 제공합니다.

Constant설명
QDataStream::Qt_1_01버전 1(Qt 1.x)
QDataStream::Qt_2_02버전 2 (Qt 2.0)
QDataStream::Qt_2_13버전 3 (Qt 2.1, 2.2, 2.3)
QDataStream::Qt_3_04버전 4 (Qt 3.0)
QDataStream::Qt_3_15버전 5(Qt 3.1, 3.2)
QDataStream::Qt_3_36버전 6 (Qt 3.3)
QDataStream::Qt_4_07버전 7 (Qt 4.0, Qt 4.1)
QDataStream::Qt_4_1Qt_4_0버전 7 (Qt 4.0, Qt 4.1)
QDataStream::Qt_4_28버전 8 (Qt 4.2)
QDataStream::Qt_4_39버전 9 (Qt 4.3)
QDataStream::Qt_4_410버전 10 (Qt 4.4)
QDataStream::Qt_4_511버전 11 (Qt 4.5)
QDataStream::Qt_4_612버전 12 (Qt 4.6, Qt 4.7, Qt 4.8)
QDataStream::Qt_4_7Qt_4_6Qt_4_6과 동일.
QDataStream::Qt_4_8Qt_4_7Qt_4_6과 동일.
QDataStream::Qt_4_9Qt_4_8Qt_4_6과 동일.
QDataStream::Qt_5_013버전 13 (Qt 5.0)
QDataStream::Qt_5_114버전 14 (Qt 5.1)
QDataStream::Qt_5_215버전 15 (Qt 5.2)
QDataStream::Qt_5_3Qt_5_2Qt_5_2와 동일
QDataStream::Qt_5_416버전 16 (Qt 5.4)
QDataStream::Qt_5_5Qt_5_4Qt_5_4와 동일
QDataStream::Qt_5_617버전 17 (Qt 5.6)
QDataStream::Qt_5_7Qt_5_6Qt_5_6 과 동일
QDataStream::Qt_5_8Qt_5_7Qt_5_6과 동일
QDataStream::Qt_5_9Qt_5_8Qt_5_6과 동일
QDataStream::Qt_5_10Qt_5_9Qt_5_6과 동일
QDataStream::Qt_5_11Qt_5_10Qt_5_6과 동일
QDataStream::Qt_5_1218버전 18 (Qt 5.12)
QDataStream::Qt_5_1319버전 19 (Qt 5.13)
QDataStream::Qt_5_14Qt_5_13Qt_5_13과 동일
QDataStream::Qt_5_15Qt_5_14Qt_5_13과 동일
QDataStream::Qt_6_020버전 20 (Qt 6.0)
QDataStream::Qt_6_1Qt_6_0Qt_6_0 과 동일
QDataStream::Qt_6_2Qt_6_0Qt_6_0과 동일
QDataStream::Qt_6_3Qt_6_0Qt_6_0과 동일
QDataStream::Qt_6_4Qt_6_0Qt_6_0과 동일
QDataStream::Qt_6_5Qt_6_0Qt_6_0과 동일
QDataStream::Qt_6_621버전 21 (Qt 6.6)
QDataStream::Qt_6_722버전 22 (Qt 6.7)
QDataStream::Qt_6_8Qt_6_7Qt_6_7과 동일

setVersion() 및 version()도 참조하십시오 .

멤버 함수 문서

QDataStream::QDataStream()

I/O 장치가 없는 데이터 스트림을 구성합니다.

setDevice()도 참조하세요 .

[explicit] QDataStream::QDataStream(QIODevice *d)

I/O 장치 d 를 사용하는 데이터 스트림을 구축합니다.

setDevice() 및 device()도 참조하세요 .

QDataStream::QDataStream(const QByteArray &a)

바이트 배열에서 작동하는 읽기 전용 데이터 스트림을 구축합니다 a. 바이트 배열에 쓰려면 QDataStream(QByteArray*, int)을 사용하세요.

QByteArrayQIODevice 서브클래스가 아니므로 내부적으로 QBuffer 이 생성되어 바이트 배열을 감싸게 됩니다.

QDataStream::QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode)

바이트 배열에서 작동하는 데이터 스트림( a)을 구성합니다. mode 에서 장치 사용 방법을 설명합니다.

또는 바이트 배열에서 읽기만 하려면 QDataStream(const QByteArray &)을 사용할 수 있습니다.

QByteArrayQIODevice 서브클래스가 아니므로 내부적으로 QBuffer 이 생성되어 바이트 배열을 감싸게 됩니다.

[noexcept] QDataStream::~QDataStream()

데이터 스트림을 소멸합니다.

소멸자는 생성자에서 전달된 QByteArray 을 처리하는 내부 I/O 장치(예: QBuffer)가 아닌 한 현재 I/O 장치에 영향을 미치지 않으며, 이 경우 내부 I/O 장치는 소멸됩니다.

void QDataStream::abortTransaction()

읽기 트랜잭션을 중단합니다.

이 함수는 일반적으로 상위 수준의 프로토콜 오류 또는 스트림 동기화 손실 후 트랜잭션을 폐기하는 데 사용됩니다.

내부 트랜잭션에서 호출되면 중단이 가장 바깥쪽 트랜잭션으로 위임되고 이후 시작된 내부 트랜잭션은 강제로 실패하게 됩니다.

가장 바깥쪽 트랜잭션의 경우, 스트림의 복원 지점과 내부적으로 복제된 데이터를 모두 삭제합니다. 스트림의 현재 읽기 위치에는 영향을 주지 않습니다.

데이터 스트림의 상태를

Constant설명
ReadCorruptData.

startTransaction(), commitTransaction() 및 rollbackTransaction()도 참조하세요 .

bool QDataStream::atEnd() const

I/O 장치가 끝 위치(스트림 또는 파일의 끝)에 도달했거나 설정된 I/O 장치가 없는 경우 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

QIODevice::atEnd()도 참조하세요 .

QDataStream::ByteOrder QDataStream::byteOrder() const

현재 바이트 순서 설정( BigEndian 또는 LittleEndian)을 반환합니다.

setByteOrder()도 참조하세요 .

bool QDataStream::commitTransaction()

읽기 트랜잭션을 완료합니다. 트랜잭션 중에 읽기 오류가 발생하지 않은 경우 true 를 반환하고, 그렇지 않으면 false 을 반환합니다.

내부 트랜잭션에서 호출되면 가장 바깥쪽에 있는 commitTransaction(), rollbackTransaction() 또는 abortTransaction() 호출이 발생할 때까지 커밋이 연기됩니다.

그렇지 않으면 스트림 상태가 데이터의 끝을 지나서 읽었음을 나타내는 경우 이 함수는 startTransaction() 호출 시점으로 스트림 데이터를 복원합니다. 이 상황이 발생하면 더 많은 데이터가 도착할 때까지 기다린 다음 새 트랜잭션을 시작해야 합니다. 데이터 스트림에서 손상된 데이터를 읽었거나 내부 트랜잭션 중 하나가 중단된 경우 이 함수는 트랜잭션을 중단합니다.

startTransaction(), rollbackTransaction() 및 abortTransaction()도 참조하세요 .

QIODevice *QDataStream::device() const

현재 설정된 I/O 장치를 반환하거나, 현재 설정된 장치가 없는 경우 nullptr 을 반환합니다.

setDevice()도 참조하세요 .

QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const

데이터 스트림의 부동 소수점 정밀도를 반환합니다.

FloatingPointPrecisionsetFloatingPointPrecision()도 참조하세요 .

[since 6.7] QDataStream &QDataStream::readBytes(char *&s, qint64 &l)

스트림에서 s 버퍼를 읽고 스트림에 대한 참조를 반환합니다.

s 버퍼는 new [] 을 사용하여 할당됩니다. delete [] 연산자를 사용하여 소멸합니다.

l 매개 변수는 버퍼의 길이로 설정됩니다. 읽은 문자열이 비어 있으면 l 은 0 으로 설정되고 snullptr 으로 설정됩니다.

직렬화 형식은 먼저 길이 지정자를 지정한 다음 l 바이트의 데이터를 지정합니다. 길이 지정자는 버전이 6.7 미만이거나 요소 수가 0xfffffffe(2^32 -2) 미만인 경우 1 퀸트32이고, 그렇지 않으면 확장 값 0xfffffffe 뒤에 실제 값이 있는 1 퀸트64가 있습니다. 또한 isNull()을 지원하는 컨테이너의 경우, 모든 비트가 설정되고 데이터가 없는 단일 퀸트32로 인코딩됩니다.

이 함수는 Qt 6.7에 도입되었습니다.

readRawData() 및 writeBytes()도 참조하세요 .

[until 6.11] QDataStream &QDataStream::readBytes(char *&s, uint &l)

이 함수는 버전 6.11에서 더 이상 사용되지 않을 예정입니다.

대신 qint64 길이를 사용하는 오버로드를 사용하세요.

qint64 QDataStream::readRawData(char *s, qint64 len)

스트림에서 s 으로 최대 len 바이트를 읽고 읽은 바이트 수를 반환합니다. 오류가 발생하면 이 함수는 -1을 반환합니다.

s 버퍼를 미리 할당해야 합니다. 데이터는 디코딩되지 않습니다.

readBytes(), QIODevice::read() 및 writeRawData()도 참조하세요 .

void QDataStream::resetStatus()

데이터 스트림의 상태를 초기화합니다.

Status, status() 및 setStatus()도 참조하세요 .

void QDataStream::rollbackTransaction()

읽기 트랜잭션을 되돌립니다.

이 함수는 일반적으로 트랜잭션을 커밋하기 전에 불완전한 읽기가 감지되었을 때 트랜잭션을 롤백하는 데 사용됩니다.

내부 트랜잭션에서 호출되면 가장 바깥쪽 트랜잭션으로 되돌리기가 위임되고 이후 시작된 내부 트랜잭션은 강제로 실패합니다.

가장 바깥쪽 트랜잭션의 경우 startTransaction() 호출 지점으로 스트림 데이터를 복원합니다. 데이터 스트림에서 손상된 데이터를 읽었거나 내부 트랜잭션 중 하나가 중단된 경우 이 함수는 트랜잭션을 중단합니다.

앞의 스트림 작업이 성공했다면 데이터 스트림의 상태를

Constant설명
ReadPastEnd.

startTransaction(), commitTransaction() 및 abortTransaction()도 참조하세요 .

void QDataStream::setByteOrder(QDataStream::ByteOrder bo)

직렬화 바이트 순서를 bo 로 설정합니다.

bo 매개변수는 QDataStream::BigEndian 또는 QDataStream::LittleEndian 일 수 있습니다.

기본 설정은 빅엔디안입니다. 특별한 요구 사항이 없는 한 이 설정을 그대로 두는 것이 좋습니다.

byteOrder()도 참조하세요 .

void QDataStream::setDevice(QIODevice *d)

void QDataStream::setDevice(QIODevice *d)

I/O 장치를 d 로 설정합니다. nullptr 은 현재 I/O 장치로 설정 해제할 수 있습니다.

device()도 참조하십시오 .

void QDataStream::setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision)

데이터 스트림의 부동 소수점 정밀도를 precision 로 설정합니다. 부동 소수점 정밀도가 DoublePrecision 이고 데이터 스트림의 버전이 Qt_4_6 이상인 경우 모든 부동 소수점 숫자는 64비트 정밀도로 쓰거나 읽습니다. 부동 소수점 정밀도가 SinglePrecision 이고 버전이 Qt_4_6 이상인 경우, 모든 부동 소수점 숫자는 32비트 정밀도로 쓰거나 읽습니다.

Qt_4_6 이전 버전의 경우 데이터 스트림에서 부동 소수점 숫자의 정밀도는 호출되는 스트림 연산자에 따라 달라집니다.

기본값은 DoublePrecision 입니다.

이 속성은 qfloat16 인스턴스의 직렬화 또는 역직렬화에는 영향을 미치지 않습니다.

경고: 이 속성은 쓰는 객체와 데이터 스트림을 읽는 객체에서 동일한 값으로 설정해야 합니다.

floatingPointPrecision()도 참조하세요 .

void QDataStream::setStatus(QDataStream::Status status)

데이터 스트림의 상태를 주어진 status 로 설정합니다.

resetStatus()가 호출될 때까지 이후의 setStatus() 호출은 무시됩니다.

Status, status() 및 resetStatus()도 참조하세요 .

void QDataStream::setVersion(int v)

데이터 직렬화 형식의 버전 번호를 Version 열거형 값인 v 으로 설정합니다.

현재 버전의 Qt를 사용하는 경우 버전을 설정할 필요는 없지만 사용자 정의 바이너리 형식의 경우 설정하는 것이 좋습니다(자세한 설명의 Versioning 참조).

새로운 기능을 수용하기 위해 일부 Qt 클래스의 데이터 스트림 직렬화 형식이 일부 Qt 버전에서 변경되었습니다. 이전 버전의 Qt에서 생성된 데이터를 읽거나 이전 버전의 Qt로 컴파일된 프로그램에서 읽을 수 있는 데이터를 쓰려면, 이 함수를 사용하여 QDataStream 에서 사용하는 직렬화 형식을 수정하십시오.

Version 열거형은 다양한 버전의 Qt에 대한 기호 상수를 제공합니다. 예를 들어:

QDataStream out(file);
out.setVersion(QDataStream::Qt_4_0);

version() 및 Version참조하십시오 .

qint64 QDataStream::skipRawData(qint64 len)

장치에서 len 바이트를 건너뜁니다. 실제로 건너뛴 바이트 수 또는 오류 시 -1을 반환합니다.

이는 len 길이의 버퍼에서 readRawData()를 호출하고 버퍼를 무시하는 것과 같습니다.

QIODevice::seek()도 참조하세요 .

void QDataStream::startTransaction()

스트림에서 새 읽기 트랜잭션을 시작합니다.

읽기 작업 시퀀스 내에서 복구 가능한 지점을 정의합니다. 순차적 장치의 경우 읽기 데이터가 내부적으로 복제되어 불완전한 읽기가 발생할 경우 복구할 수 있습니다. 랜덤 액세스 장치의 경우, 이 함수는 스트림의 현재 위치를 저장합니다. commitTransaction (), rollbackTransaction() 또는 abortTransaction()를 호출하여 현재 트랜잭션을 완료합니다.

트랜잭션이 시작되면 이후 이 함수를 호출하면 트랜잭션이 재귀적으로 진행됩니다. 내부 트랜잭션은 가장 바깥쪽 트랜잭션의 에이전트 역할을 합니다(즉, 스트림의 위치를 복원할 수 있는 가장 바깥쪽 트랜잭션에 읽기 작업의 상태를 보고합니다).

참고: 중첩된 startTransaction() 호출 지점으로 복원하는 것은 지원되지 않습니다.

트랜잭션 중에 오류가 발생하면(내부 트랜잭션 실패 포함) 데이터 스트림에서 읽기가 일시 중단되고(이후의 모든 읽기 작업은 빈/0 값을 반환) 이후의 내부 트랜잭션은 강제로 실패하게 됩니다. 새로운 외부 트랜잭션을 시작하면 이 상태에서 복구됩니다. 이 동작을 사용하면 모든 읽기 작업을 개별적으로 오류 검사할 필요가 없습니다.

commitTransaction(), rollbackTransaction() 및 abortTransaction()도 참조하세요 .

QDataStream::Status QDataStream::status() const

데이터 스트림의 상태를 반환합니다.

Status, setStatus() 및 resetStatus()도 참조하세요 .

int QDataStream::version() const

데이터 직렬화 형식의 버전 번호를 반환합니다.

setVersion() 및 Version도 참조하세요 .

QDataStream &QDataStream::writeBytes(const char *s, qint64 len)

길이 지정자 len 및 버퍼 s 를 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

len 은 퀸트32와 선택적 퀸트64로 직렬화되고, 그 뒤에 s 에서 len 바이트가 이어집니다. 데이터는 인코딩되지 않는다는 점에 유의하세요.

writeRawData() 및 readBytes()도 참조하세요 .

qint64 QDataStream::writeRawData(const char *s, qint64 len)

s 에서 len 바이트를 스트림에 씁니다. 실제로 쓰여진 바이트 수 또는 오류 시 -1을 반환합니다. 데이터는 인코딩되지 않습니다.

writeBytes(), QIODevice::write() 및 readRawData()도 참조하세요 .

QDataStream &QDataStream::operator<<(qint8 i)

스트림에 부호화된 바이트( i)를 쓰고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(bool i)

이 함수는 오버로드된 함수입니다.

부울 값 i 을 스트림에 씁니다. 스트림에 대한 참조를 반환합니다.

[since 6.0] QDataStream &QDataStream::operator<<(char16_t c)

이 함수는 오버로드된 함수입니다.

c 이라는 문자를 스트림에 씁니다. 스트림에 대한 참조를 반환합니다.

이 함수는 Qt 6.0에 도입되었습니다.

[since 6.0] QDataStream &QDataStream::operator<<(char32_t c)

이 함수는 오버로드된 함수입니다.

c 이라는 문자를 스트림에 씁니다. 스트림에 대한 참조를 반환합니다.

이 함수는 Qt 6.0에 도입되었습니다.

QDataStream &QDataStream::operator<<(const char *s)

이 함수는 오버로드된 함수입니다.

'\0'으로 끝나는 문자열 s 을 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

문자열은 writeBytes() 을 사용하여 직렬화됩니다.

writeBytes() 및 writeRawData()도 참조하세요 .

QDataStream &QDataStream::operator<<(double f)

이 함수는 오버로드된 함수입니다.

표준 IEEE 754 형식을 사용하여 부동 소수점 숫자 f 를 스트림에 씁니다. 스트림에 대한 참조를 반환합니다.

setFloatingPointPrecision()도 참조하세요 .

QDataStream &QDataStream::operator<<(float f)

이 함수는 오버로드된 함수입니다.

표준 IEEE 754 형식을 사용하여 부동 소수점 숫자 f 를 스트림에 씁니다. 스트림에 대한 참조를 반환합니다.

setFloatingPointPrecision()도 참조하세요 .

QDataStream &QDataStream::operator<<(qint16 i)

이 함수는 오버로드된 함수입니다.

부호화된 16비트 정수 i 를 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(qint32 i)

이 함수는 오버로드된 함수입니다.

부호화된 32비트 정수 i 를 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(qint64 i)

이 함수는 오버로드된 함수입니다.

부호화된 64비트 정수 i 를 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(quint16 i)

이 함수는 오버로드된 함수입니다.

부호 없는 16비트 정수 i 를 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(quint32 i)

이 함수는 오버로드된 함수입니다.

부호 없는 정수 i 를 32비트 부호 없는 정수(quint32)로 스트림에 씁니다. 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(quint64 i)

이 함수는 오버로드된 함수입니다.

부호 없는 64비트 정수 i 를 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(quint8 i)

이 함수는 오버로드된 함수입니다.

서명되지 않은 바이트( i)를 스트림에 쓰고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator<<(std::nullptr_t ptr)

이 함수는 오버로드된 함수입니다.

std::nullptr_t, ptr 을 스트림에 쓰는 것을 시뮬레이션하고 스트림에 대한 참조를 반환합니다. std::nullptr_t 값은 0바이트로 저장되므로 이 함수는 실제로 스트림에 아무것도 쓰지 않습니다.

QDataStream &QDataStream::operator>>(bool &i)

스트림에서 i 로 부울 값을 읽습니다. 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(qint8 &i)

스트림에서 i 로 부호화된 바이트를 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(char *&s)

이 함수는 오버로드된 함수입니다.

스트림에서 s 문자열을 읽고 스트림에 대한 참조를 반환합니다.

문자열은 readBytes() 을 사용하여 역직렬화되며, 직렬화 형식은 quint32 길이 지정자가 먼저 오고 그 뒤에 해당 바이트 수만큼의 데이터가옵니다. 결과 문자열은 항상 '\0'으로 끝납니다.

문자열을 위한 공간은 new [] 을 사용하여 할당되며, 호출자는 delete [] 을 사용하여 문자열을 삭제해야 합니다.

readBytes() 및 readRawData()도 참조하세요 .

[since 6.0] QDataStream &QDataStream::operator>>(char16_t &c)

이 함수는 오버로드된 함수입니다.

스트림에서 c 로 16비트 폭의 문자를 읽고 스트림에 대한 참조를 반환합니다.

이 함수는 Qt 6.0에 도입되었습니다.

[since 6.0] QDataStream &QDataStream::operator>>(char32_t &c)

이 함수는 오버로드된 함수입니다.

스트림에서 32비트 너비의 문자를 c 로 읽고 스트림에 대한 참조를 반환합니다.

이 함수는 Qt 6.0에 도입되었습니다.

QDataStream &QDataStream::operator>>(double &f)

이 함수는 오버로드된 함수입니다.

표준 IEEE 754 형식을 사용하여 스트림에서 f 으로 부동 소수점 숫자를 읽습니다. 스트림에 대한 참조를 반환합니다.

setFloatingPointPrecision()도 참조하세요 .

QDataStream &QDataStream::operator>>(float &f)

이 함수는 오버로드된 함수입니다.

표준 IEEE 754 형식을 사용하여 스트림에서 f 으로 부동 소수점 숫자를 읽습니다. 스트림에 대한 참조를 반환합니다.

setFloatingPointPrecision()도 참조하세요 .

QDataStream &QDataStream::operator>>(qint16 &i)

이 함수는 오버로드된 함수입니다.

스트림에서 부호화된 16비트 정수를 i 로 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(qint32 &i)

이 함수는 오버로드된 함수입니다.

스트림에서 부호화된 32비트 정수를 i 로 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(qint64 &i)

이 함수는 오버로드된 함수입니다.

스트림에서 부호화된 64비트 정수를 i 로 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(quint16 &i)

이 함수는 오버로드된 함수입니다.

스트림에서 부호 없는 16비트 정수를 i 로 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(quint32 &i)

이 함수는 오버로드된 함수입니다.

스트림에서 부호 없는 32비트 정수를 i 로 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(quint64 &i)

이 함수는 오버로드된 함수입니다.

스트림에서 부호 없는 64비트 정수를 i 로 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(quint8 &i)

이 함수는 오버로드된 함수입니다.

스트림에서 서명되지 않은 바이트를 i 로 읽고 스트림에 대한 참조를 반환합니다.

QDataStream &QDataStream::operator>>(std::nullptr_t &ptr)

이 함수는 오버로드된 함수입니다.

스트림에서 ptrstd::nullptr_t 를 읽는 것을 시뮬레이션하고 스트림에 대한 참조를 반환합니다. std::nullptr_t 값은 0바이트로 저장되므로 이 함수는 실제로 스트림에서 아무것도 읽지 않습니다.

관련 비회원

[since 6.0] template <typename T1, typename T2> QDataStream &operator<<(QDataStream &out, const std::pair<T1, T2> &pair)

pair 쌍을 작성하여 out 을 스트리밍합니다.

이 함수는 operator<<() 을 구현하기 위해 T1 및 T2 타입이 필요합니다.

이 함수는 Qt 6.0에 도입되었습니다.

Qt 데이터 유형 직렬화도참조하십시오 .

[since 6.0] template <typename T1, typename T2> QDataStream &operator>>(QDataStream &in, std::pair<T1, T2> &pair)

스트림 in 에서 pair 로 한 쌍을 읽습니다.

이 함수는 operator>>() 을 구현하기 위해 T1 및 T2 타입이 필요합니다.

이 함수는 Qt 6.0에 도입되었습니다.

Qt 데이터 유형 직렬화도참조하십시오 .

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