이 페이지에서

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

공개 함수

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)
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)
(since 6.10) operator bool() const
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)
QDataStream &operator<<(QDataStream &ds, qfloat16 f)
QDataStream &operator>>(QDataStream &ds, qfloat16 &f)
(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 클래스는 I/O 장치의 한 예입니다.

예제 (스트림에 이진 데이터 쓰기):

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

QBrush QColor QDateTime QFont QPixmap QString QVariant

정수의 경우, 쓰기 시에는 항상 Qt 정수 유형으로 형변환하고, 읽을 때도 동일한 Qt 정수 유형으로 다시 읽어들이는 것이 가장 좋습니다. 이렇게 하면 원하는 크기의 정수를 확보할 수 있으며, 컴파일러 및 플랫폼 간의 차이로 인한 문제를 방지할 수 있습니다.

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

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

컨테이너 및 문자열 직렬화

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

예를 들어, 문자열 길이가 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_1);
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()이 있습니다. 이 함수들은 원시(raw) 함수들과 다음과 같이 다릅니다: readBytes()는 읽을 데이터의 길이로 간주되는 quint32를 읽은 다음, 해당 바이트 수만큼을 미리 할당된 char * 에 읽어옵니다; writeBytes()는 데이터의 길이를 포함하는 quint32를 먼저 쓰고, 그 뒤에 데이터를 기록합니다. 단, 데이터의 인코딩/디코딩 작업(길이 값인 quint32를 제외하고)은 사용자가 직접 수행해야 합니다.

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

Qt 컨테이너 클래스도 QDataStream으로 직렬화할 수 있습니다. 여기에는 QList, QSet, QHash 및 QMap 가 포함됩니다. 스트림 연산자는 해당 클래스의 비회원(non-member)으로 선언됩니다.

다른 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 클래스에 유사한 스트림 연산자가 정의되어 있는지 확인하려면, 해당 클래스의 문서 페이지에서 ‘관련 비멤버 (Related Non-Members )’ 섹션을 살펴보십시오.

읽기 트랜잭션 사용

데이터 스트림이 비동기 장치에서 작동할 때, 데이터 청크는 임의의 시점에 도착할 수 있습니다. 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은 출처를 신뢰할 수 없는 콘텐츠에는 사용해서는 안 됩니다. 애플리케이션은 적어도 애플리케이션 자체나 그 플러그인의 출처만큼 신뢰할 수 있는 스트림만 디코딩하도록 설계되어야 합니다.

QTextStream 및 QVariant도 참조하십시오 .

멤버 유형 문서

enum QDataStream::ByteOrder

데이터를 읽거나 쓸 때 사용되는 바이트 순서.

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

enum QDataStream::FloatingPointPrecision

데이터 읽기/쓰기에 사용되는 부동소수점 숫자의 정밀도입니다. 이 설정은 데이터 스트림 버전이 Qt_4_6 이상일 때만 적용됩니다.

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

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

setFloatingPointPrecision() 및 floatingPointPrecision()도 참조하십시오 .

enum QDataStream::Status

이 열거형은 데이터 스트림의 현재 상태를 나타냅니다.

상수값설명
QDataStream::Ok0데이터 스트림이 정상적으로 작동하고 있습니다.
QDataStream::ReadPastEnd1데이터 스트림이 기본 장치의 데이터 끝 지점을 넘어 읽었습니다.
QDataStream::ReadCorruptData2데이터 스트림이 손상된 데이터를 읽었습니다.
QDataStream::WriteFailed3데이터 스트림이 기본 장치에 데이터를 쓸 수 없습니다.
QDataStream::SizeLimitExceeded (since Qt 6.7)4데이터 스트림의 크기가 현재 플랫폼에서 지원하는 최대 크기를 초과하여 데이터를 읽거나 쓸 수 없습니다. 예를 들어, 32비트 플랫폼에서 2 GiB 이상의 데이터를 읽으려고 할 때 이러한 현상이 발생할 수 있습니다.

enum QDataStream::Version

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

상수값
QDataStream::Qt_1_01
QDataStream::Qt_2_02
QDataStream::Qt_2_13
QDataStream::Qt_3_04
QDataStream::Qt_3_15
QDataStream::Qt_3_36
QDataStream::Qt_4_07
QDataStream::Qt_4_1Qt_4_0
QDataStream::Qt_4_28
QDataStream::Qt_4_39
QDataStream::Qt_4_410
QDataStream::Qt_4_511
QDataStream::Qt_4_612
QDataStream::Qt_4_7Qt_4_6
QDataStream::Qt_4_8Qt_4_7
QDataStream::Qt_4_9Qt_4_8
QDataStream::Qt_5_013
QDataStream::Qt_5_114
QDataStream::Qt_5_215
QDataStream::Qt_5_3Qt_5_2
QDataStream::Qt_5_416
QDataStream::Qt_5_5Qt_5_4
QDataStream::Qt_5_617
QDataStream::Qt_5_7Qt_5_6
QDataStream::Qt_5_8Qt_5_7
QDataStream::Qt_5_9Qt_5_8
QDataStream::Qt_5_10Qt_5_9
QDataStream::Qt_5_11Qt_5_10
QDataStream::Qt_5_1218
QDataStream::Qt_5_1319
QDataStream::Qt_5_14Qt_5_13
QDataStream::Qt_5_15Qt_5_14
QDataStream::Qt_6_020
QDataStream::Qt_6_1Qt_6_0
QDataStream::Qt_6_2Qt_6_0
QDataStream::Qt_6_3Qt_6_0
QDataStream::Qt_6_4Qt_6_0
QDataStream::Qt_6_5Qt_6_0
QDataStream::Qt_6_621
QDataStream::Qt_6_722
QDataStream::Qt_6_8Qt_6_7
QDataStream::Qt_6_9Qt_6_7
QDataStream::Qt_6_1023
QDataStream::Qt_6_1124
QDataStream::Qt_6_12Qt_6_11

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

멤버 함수 문서

QDataStream::QDataStream()

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

setDevice()도 참조하십시오 .

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

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

setDevice() 및 device()도 참조하십시오 .

QDataStream::QDataStream(const QByteArray &a)

바이트 배열 ` a`을 대상으로 작동하는 읽기 전용 데이터 스트림을 생성합니다. 바이트 배열에 데이터를 쓰려면 `QDataStream(QByteArray*, int)`을 사용하십시오.

QByteArray 는 QIODevice 의 하위 클래스가 아니므로, 내부적으로 바이트 배열을 래핑하기 위해 QBuffer 가 생성됩니다.

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

바이트 배열( a)을 대상으로 작동하는 데이터 스트림을 생성합니다. mode 는 이 디바이스의 사용 방법을 설명합니다.

단순히 바이트 배열에서 데이터를 읽기만 하려는 경우에는 QDataStream(const QByteArray &)을 사용할 수도 있습니다.

QByteArray 는 QIODevice 의 하위 클래스가 아니므로, 내부적으로 바이트 배열을 감싸기 위해 QBuffer 가 생성됩니다.

[noexcept] QDataStream::~QDataStream()

데이터 스트림을 파기합니다.

소멸자는 현재 I/O 장치에 영향을 미치지 않습니다. 단, 생성자에서 전달된 ` QByteArray `를 처리하는 내부 I/O 장치(예: ` QBuffer`)인 경우에는 해당 내부 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

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

FloatingPointPrecision 및 setFloatingPointPrecision()도 참조하십시오 .

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

스트림에서 버퍼 s 를 읽어들이고, 해당 스트림에 대한 참조를 반환합니다.

버퍼 ` s `는 ` new []`를 사용하여 할당됩니다. ` delete [] ` 연산자를 사용하여 이를 해제하십시오.

l 매개변수는 버퍼의 길이로 설정됩니다. 읽은 문자열이 비어 있는 경우, l 는 0으로, s 는 nullptr 로 설정됩니다.

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

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

readRawData() 및 writeBytes()도 참조하십시오 .

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

스트림에서 최대 len 바이트를 s 로 읽어들이고, 읽은 바이트 수를 반환합니다. 오류가 발생하면 이 함수는 -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)

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

현재 버전의 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 는 quint32와 선택적 quint64로 직렬화되며, 그 뒤에 s 에서 가져온 len 바이트가 이어집니다. 데이터는 인코딩되지 않는다는 점에 유의하십시오.

writeRawData() 및 readBytes()도 참조하십시오 .

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

s 에서 len 바이트를 스트림에 기록합니다. 실제로 기록된 바이트 수를 반환하며, 오류가 발생하면 -1을 반환합니다. 데이터는 인코딩 되지 않습니다.

writeBytes(), QIODevice::write(), readRawData()도 참조하십시오 .

[explicit noexcept, since 6.10] QDataStream::operator bool() const

이 스트림에 오류가 없는지 여부를 반환합니다(status()는 Ok 를 반환합니다).

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

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)

i 인 부호 없는 16비트 정수를 스트림에 기록하고, 해당 스트림에 대한 참조를 반환합니다.

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

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

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

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

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

i 인 부호 없는 64비트 정수를 스트림에 기록하고, 해당 스트림에 대한 참조를 반환합니다.

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

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)

스트림에서 16비트 폭의 char를 읽어와 ` c `에 할당하고, 스트림에 대한 참조를 반환합니다.

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

이 함수는 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)

스트림에서 ` std::nullptr_t `를 ` ptr `로 읽어들이는 것처럼 시뮬레이션하고, 스트림에 대한 참조를 반환합니다. ` 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 데이터 유형 직렬화'항목도 참조하십시오 .

QDataStream &operator<<(QDataStream &ds, qfloat16 f)

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

참고: Qt 6.3 이전버전에서는 이 함수가 ` QDataStream`의 멤버 함수였습니다.

QDataStream &operator>>(QDataStream &ds, qfloat16 &f)

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

참고: Qt 6.3 이전버전에서는 이 함수가 QDataStream 의 멤버 함수였습니다.

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

in 스트림에서 한 쌍의 값을 읽어 pair 에 저장합니다.

이 함수를 사용하려면 T1 및 T2 유형이 operator>>() 을 구현해야 합니다.

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

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

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