Doc: QDataStream doc example
Updated the example description Fixes: QTBUG-123035 Change-Id: I3dc953b02297e6e6bd9aecbc2e8831f13cf48715 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> (cherry picked from commit 210063a3cfcbe5fa9506ea14fd27787765ae2e9b) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
2141c7998a
commit
fadeb174bc
@ -70,17 +70,30 @@ constexpr quint32 QDataStream::ExtendedSize;
|
|||||||
need of manually defining streaming operators. Enum classes are
|
need of manually defining streaming operators. Enum classes are
|
||||||
serialized using the declared size.
|
serialized using the declared size.
|
||||||
|
|
||||||
To take one example, a \c{char *} string is written as a 32-bit
|
|
||||||
integer equal to the length of the string including the '\\0' byte,
|
|
||||||
followed by all the characters of the string including the
|
|
||||||
'\\0' byte. When reading a \c{char *} string, 4 bytes are read to
|
|
||||||
create the 32-bit length value, then that many characters for the
|
|
||||||
\c {char *} string including the '\\0' terminator are read.
|
|
||||||
|
|
||||||
The initial I/O device is usually set in the constructor, but can be
|
The initial I/O device is usually set in the constructor, but can be
|
||||||
changed with setDevice(). If you've reached the end of the data
|
changed with setDevice(). If you've reached the end of the data
|
||||||
(or if there is no I/O device set) atEnd() will return true.
|
(or if there is no I/O device set) atEnd() will return true.
|
||||||
|
|
||||||
|
\section1 Serializing containers and strings
|
||||||
|
|
||||||
|
The serialization format is a length specifier first, then \a l bytes of data.
|
||||||
|
The length specifier is one quint32 if the version is less than 6.7 or if the
|
||||||
|
number of elements is less than 0xfffffffe (2^32 -2). Otherwise there is
|
||||||
|
an extend value 0xfffffffe followed by one quint64 with the actual value.
|
||||||
|
In addition for containers that support isNull(), it is encoded as a single
|
||||||
|
quint32 with all bits set and no data.
|
||||||
|
|
||||||
|
To take one example, if the string size fits into 32 bits, a \c{char *} string
|
||||||
|
is written as a 32-bit integer equal to the length of the string, including
|
||||||
|
the '\\0' byte, followed by all the characters of the string, including the
|
||||||
|
'\\0' byte. If the string size is greater, the value 0xffffffffe is written
|
||||||
|
as a marker of an extended size, followed by 64 bits of the actual size.
|
||||||
|
When reading a \c {char *} string, 4 bytes are read first. If the value is
|
||||||
|
not equal to 0xffffffffe (the marker of extended size), then these 4 bytes
|
||||||
|
are treated as the 32 bit size of the string. Otherwise, the next 8 bytes are
|
||||||
|
read and treated as a 64 bit size of the string. Then, all the characters for
|
||||||
|
the \c {char *} string, including the '\\0' terminator, are read.
|
||||||
|
|
||||||
\section1 Versioning
|
\section1 Versioning
|
||||||
|
|
||||||
QDataStream's binary format has evolved since Qt 1.0, and is
|
QDataStream's binary format has evolved since Qt 1.0, and is
|
||||||
|
Loading…
x
Reference in New Issue
Block a user