计算 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 << buf.data();
- 此代码将写入 4 个字节 + 数据 - doc.qt.io/qt-5/datastreamformat.html
有什么理由让我更喜欢 QBuffer 而不是 QByteArray?
@LennartRolland No. QBuffer
使用QByteArray
作为存储,所以它们是相似的。以上是关于计算 Qt5 中写入 QDataStream 的字节数的主要内容,如果未能解决你的问题,请参考以下文章
读取 QDataStream 中的特定对象并计算存储的对象数
从QDataStream向QByteArray中写入数据时的注意点(QT)