我需要将QVariantMap
作为QByteArray
序列化,而且似乎正确的方法是通过QDataStream
。不过,我这样做很麻烦。我没有收到任何错误,但实际上并没有将任何内容保存到字节数组中。使用QDataStream将QVariantMap序列化为QByteArray
//Create a QVariantMap that has a key value pair
QVariantMap *myMap = new QVariantMap();
myMap->insert("MyKey","the value for MyKey");
// Serialize it to a QBiteArray using a QDataStream object
QByteArray byteArray;
QDataStream stream(&byteArray, QIODevice::WriteOnly);
//qDebug() << byteArray.toHex(); ==> "" (because byteArray is empty)
stream << myMap;
//qDebug() << byteArray.toHex(); ==> "01" (regardless of what the key/value/etc. was, it's always 01)
//Test whether I can read it out
QVariantMap inMap;
QDataStream inStream(&byteArray, QIODevice::ReadOnly);
instream >> inMap;
//qDebug() << inMap.keys(); ==>() (No keys are in the map)
所以没有任何错误或明显地失败,但它仍然无法居然把任何值(除了01 - 大小?)入的ByteArray。我在这个主题上尝试了一些变体,没有任何变体(除了只是导致错误的变体)。
我做的唯一有所作为的是多个“流< < myMap”行,例如,如果我重复该行三次,则将byteArray设置为“010101”。所以我每次运行“流< < myMap”时,我都会再得到一个“01”。
我担心我可能刚刚有不正确的读取代码,并且写入很好,这就是为什么我添加了检查十六进制代码的调试行,并且明确指出存在写入错误。