Backwards-compatible QDataStream?
-
Hi, is it possible to make
QDataStream
's output "backwards-compatible"?I mean something like Google's protobuf, where when you add a field, it doesn't affect any of the apps that don't know how to deal with it. I would like to be able to add (or even remove fields) without making the whole file unusable for other/older applications.
Thanks!
-
Use QDataStream::setVersion to set fixed minimal version
-
Unfortunately there is no visioning implemented out of the box. it's up to you to make it work with old versions.
To be clear what I mean is if you have this old code:
void write(QIODevice* destination) { qint32 a=0; qint32 c=3; QDataStram stream(destination); stream << a <<c } void read(QIODevice* source){ qint32 a; qint32 c; QDataStram stream(source); stream >> a >> c; }
and you want to change it into
void write(QIODevice* destination) { qint32 a=0; qint32 b=1; qint32 c=3; QDataStram stream(destination); stream << a << b<< c; } void read(QIODevice* source){ qint32 a; qint32 b; qint32 c; QDataStram stream(source); stream >> a >> b >> c; }
There is no out-of-the-box solution to make it backward compatible
-
@tmladek
normally you write your own custom version number (magic-number) at the beginning of the data stream so you know how the data structure looks like before starting reading.