2

In my code I am preparing some data for sending over a network using QDataStream. In the middle of the preparations I would like to know exactly how many bytes that were prepared at that point. How can I do that?

Example:

int myFunc(QDataStream &ds){
   ds << "hello"
   ds << 123;
   ds << 456.7f;
   //...
   //How can I do this:
   return ds.numberOfBytesPipedIntoThisQDataStreamAtThisTime();
}
Mr. Developerdude
  • 9,118
  • 10
  • 57
  • 95

2 Answers2

2

This could work (although it looks not very elegant).

int myFunc(QDataStream& ds){
    QBuffer buf;
    buf.open(QBuffer::WriteOnly);
    QDataStream tmpStream(&buf);

    tmpStream << "hello";
    tmpStream << 123;
    tmpStream << 456.7f;
    int written = buf.size();
    if(ds.device()->write(buf.data()) != buf.data().size()) {
        // handle error
    }
    return written;
}
Oleg Andriyanov
  • 5,069
  • 1
  • 22
  • 36
2

Usual way to know the number of bytes:

QByteArray buf;
QDataStream stream( &buf, QIODevice::ReadWrite );
stream << someData;
int count = buf.size();
Vladimir Bershov
  • 2,701
  • 2
  • 21
  • 51