2011-04-11 53 views
2

這裏首先介紹我的代碼。QDataStream序列化問題

QByteArray buff; 
QDataStream stream(&buff, QIODevice::ReadWrite); 
stream.setVersion(QDataStream::Qt_4_7); 
stream << 5; 
stream << 6; 
qDebug() << buff; 
int x; 
int y; 
stream >> x >> y; 
qDebug() << x << y; 

我期望X在5和y爲6.但其示出了0 0 這裏是輸出

" 
0 0 

回答

3

正如弗蘭克所說,QDataStream仍處於最終位置(在寫入數據之後)。如果您不想創建新的流,則應該可以撥打stream.reset()將流的內部位置放到開頭。或者像stream.seek(0)

+0

幫我用不同的(但相關的)問題:原來,調用'明確的()'上的QByteArray是背上QDataStream不會重置流位置!所以,'stream <<(int)5; buff.clear(); stream <<(int)6;'將導致'buff.size()'報告'8',而不是'4'。重置流是必需的。 – Dave 2011-12-13 14:55:02

0

不能讀取/使用從/寫這樣的的QByteArray同時由於數據流的內部狀態(流位置),單個QDataStream。試用第二個QDataStream進行閱讀。

1

試試這個:

QByteArray buff; 
QDataStream stream(&buff, QIODevice::ReadWrite); 
stream.setVersion(QDataStream::Qt_4_0); 
stream << 5; 
stream << 6; 
qDebug() << buff.toHex(); 

int x; 
int y; 

// This line will move the internal QBuffer to position 0 
stream.device()->reset(); 

stream >> x >> y; 
qDebug() << x << y; 

輸出:

"0000000500000006" 
5 6