计算 Qt5 中写入 QDataStream 的字节数

Posted

技术标签:

【中文标题】计算 Qt5 中写入 QDataStream 的字节数【英文标题】:Count number of bytes written to QDataStream in Qt5 【发布时间】:2016-01-24 23:02:12 【问题描述】:

在我的代码中,我正在准备一些数据,以便使用QDataStream 通过网络发送。在准备过程中,我想知道当时准备了多少字节。我该怎么做?

例子:

int myFunc(QDataStream &ds)
   ds << "hello"
   ds << 123;
   ds << 456.7f;
   //...
   //How can I do this:
   return ds.numberOfBytesPipedIntoThisQDataStreamAtThisTime();

【问题讨论】:

你所说的“准备”是什么意思?您是否将数据流式传输到内存中的某个缓冲区,一旦所有数据准备就绪,就通过网络发送? 是的。我的 QDataStream 包装了一个 QByteArray,稍后通过网络发送。 【参考方案1】:

知道字节数的常用方法:

QByteArray buf;
QDataStream stream( &buf, QIODevice::ReadWrite );
stream << someData;
int count = buf.size();

【讨论】:

这其实是我现在正在做的。【参考方案2】:

这可以工作(虽然它看起来不是很优雅)。

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;

【讨论】:

ds &lt;&lt; buf.data(); - 此代码将写入 4 个字节 + 数据 - doc.qt.io/qt-5/datastreamformat.html 有什么理由让我更喜欢 QBuffer 而不是 QByteArray? @LennartRolland No. QBuffer 使用QByteArray 作为存储,所以它们是相似的。

以上是关于计算 Qt5 中写入 QDataStream 的字节数的主要内容,如果未能解决你的问题,请参考以下文章

读取 QDataStream 中的特定对象并计算存储的对象数

从QDataStream向QByteArray中写入数据时的注意点(QT)

如何使用 QDataStream::readBytes()

如何在 PySide 和 Python 3.X 中将字节写入 QDataStream?

QFile/QDataStream 写入现有数据

QT中关于Qdatastream使用问题 socket 读数据同时写入file内