[Interest] "QDataStream::version()" -- safe to assume 8-bit?

Constantin Makshin cmakshin at gmail.com
Sun Oct 27 02:49:24 CET 2013


Since QDataStream versions form a contiguous sequence of integer numbers
and new ones are added in [some] minor Qt updates, I'd say you have a LOT
of time before these numbers stop fitting into 7-8 bits.

As for the magic number issue, you may store it *after* the stream version
number -- if the version is wrong (i.e. larger than your application
understands), there's no need to worry about the magic number because the
stream should be considered unreadable anyway.
On Oct 27, 2013 3:44 AM, "Charley Bay" <charleyb123 at gmail.com> wrote:

> The QDataStream docs give examples on serializing for compatible
> formats across versions defined by QDataStream:
>
> <http://doc-snapshot.qt-project.org/qdoc/qdatastream.html#setVersion>
>
> Other examples on the web are similar, like:
>
> <http://doc.qt.digia.com/qq/qq05-achtung.html>
>
> The recommendation is something like:
>
>   //---------------
>   //...
>   QDataStream out(&file);
>
>   // Write a header with a "magic number" and a version
>   out << (quint32)0xA0B0C0D0;
>   out << (qint32)123;
>   //---------------
>
> Then, reading in is:
>
>   //---------------
>   //...-
>   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;
>   //---------------
>
> QUESTION #1:  Is it safe to write the 32-bit magic-number before
> reading-and-setting the "QDataStream::version()" ?  It seems like
> these examples are not cross-platform, as the 32-bit value may have
> varying formats on different platforms.
>
> Other reading suggests that it is "safe" to assume
> "QDataStream::version()" wholly fits into an 8-bit value, so this
> should not be a problem with that value.
>
> QUESTION #2:  Is it forever safe to assume an 8-bit value is
> sufficient to store "QDataStream::version()"?
>
> Because of my concern regarding "#1", it seems like four
> "magic-quint8" values should be serialized instead of one
> "magic-quint32" value.
>
> Or, am I just paranoid?
>
> --charley
>
> P.S.:   I'll close with the quote from the Digia page above because I
> found it funny:
>
> "We have two choices, either to attack I/O now and get it over with,
> or to postpone I/O until near the end.
>
> Neither prospect is very attractive."
>   -- Donald E. Knuth
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20131027/2094c0b4/attachment.html>


More information about the Interest mailing list