1
那麼這個問題相當複雜。我正在用調試器中看到的簡化它。QIODevice首先用QDataStream讀取ReadPastEnd
QFile file(fileName);
file.open(QIODevice::WriteOnly);
QDataStream psudoStream(&file);
psudoStream.setVersion(QDataStream::Qt_4_7);
psudoStream << *packet;// Data is being serialized Properly as I can see The File in Hex Editor
file.close();
QFile file1(fileName);
file1.open(QIODevice::ReadOnly);
QDataStream pS(&file);
pS.setVersion(QDataStream::Qt_4_7);
DG::MouseEventsPacket* msd = new DG::MouseEventsPacket;
qDebug() << pS.device()->size() << pS.device()->pos();
pS >> *msd;//But the Problem Starts from Here
file1.close();
DG :: MouseEventsPacket繼承DG :: Packet。並且DG :: Packet對於QDataStream具有< <和>>運算符重載。 DG :: Packet序列化或Unserializedits數據,然後調用this-> serialize()或unserialize(),這是純虛擬傳遞它的流。
qDebug() << pS.device()->size() << pS.device()->pos();
pS >> *msd;
這兩條線在終端打印156 0
。確認有156字節可用並且當前查找位置在文件的開頭。
然後將呼叫轉至
QDataStream& DG::operator>>(QDataStream& stream, Packet& packet){
int _type;
stream >> packet._state >> _type;
packet._type = (DG::Packet::PacketType)_type;
return packet.unserialize(stream);
}
packet._state是quint32和呼叫轉到
QDataStream &QDataStream::operator>>(qint32 &i){
i = 0;
CHECK_STREAM_PRECOND(*this)
if (dev->read((char *)&i, 4) != 4) {
i = 0;
setStatus(ReadPastEnd);
} else {
if (!noswap) {
i = qbswap(i);
}
}
return *this;
}
這裏,電話將轉入如果。它確實setStatus(ReadPastEnd);.但爲什麼 ?它在醞釀中。和pos()返回0,並且還有156個字節要讀取。
哦!天哪!!!!! – 2011-06-17 08:44:57