2011-04-11 7 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; 

내가 기대 × 5, y는 6하지만 여기 0 0 을 보여주는 일이 될 것은 당신은/읽기를 사용하여 QByteArray에 /에서 다음과 같이 쓸 수 없습니다 출력

" 
0 0 

답변

3

프랭크가 언급 한 것처럼 QDataStream은 여전히 ​​(데이터를 작성한 후) 마지막 위치에 있습니다. 새로운 스트림을 작성하고 싶지 않은 경우는, stream.reset()에 호출 해, 스트림의 내부 위치를 선두에 둘 수도 있습니다. 또는 stream.seek(0)과 같은 것입니다.

+0

이 다른 (그러나 관련) 문제를 나에게 도움이 : 그것은 호출이'명확한()의'QByteArray에 그은을 백업 밝혀 QDataStream은 스트림 위치를 재설정하지 않습니다! 그래서,'stream << (int) 5; buff.clear(); stream << (int) 6;'buff.size()는'4'가 아니라'8'을보고하게됩니다. 스트림을 재설정해야합니다. – Dave

0

입니다 동시에 데이터 스트림의 내부 상태 (스트림 위치)로 인해 단일 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