QT QT QBuffer字节编写的字节无法读取
Qt QBuffer bytes written cannot be read
这里有些混乱:我正在尝试这样做:
QBuffer _ourLogMessageBuffer;
QByteArray theLogMessage;
...
qDebug() << "Writing " << theLogMessage.size() << " bytes to buffern";
qint64 numberOfBytes - _ourLogMessagesBuffer.write(theLogMessage);
qDebug() << "Wrote " << numberOfBytes << " bytes to buffern";
qDebug() << "Buffer has " << _ourLogMessagesBuffer.bytesAvailable()
<< " bytes available to read (after write)n";
这将输出以下内容:
Writing 196 bytes to buffer
Wrote 196 bytes to buffer
Buffer has 0 bytes available to read (after write)
最后一行确实使我感到困惑。我认为来自.write((方法的返回值应该说写了多少个字节?为什么它们不可用?
,以后,我尝试以下内容:
qDebug() << "Buffer has " << _ourLogMessagesBuffer.bytesAvailable()
<< " bytes available to read (before read)n";
char logMessageBytes[565];
qint64 numberOfBytes = _ourLogMessagesBuffer.read(logMessageBytes, 565);
qDebug() << "Read " << numberOfBytes << " bytes from buffern";
考虑到以前的字节可观结果,这些呼叫的输出并不令人惊讶。他们输出以下内容:
Buffer has 0 bytes available to read (before read)
Read 0 bytes from buffer
所以我觉得我错过了一步,并且您必须在写作和可以阅读的数据之间做一些事情。也许有某种寻求?但是我似乎缺少在文档中说的。
任何技巧都将不胜感激。谢谢!
您需要回到要阅读的位置:
_ourLogMessagesBuffer.seek(0);
然后,您将能够看到适当数量的字节可观。如果您将(物理(指向磁带上的位置,那是有道理的。当您编写时,指针移至可以编写更多数据的末端。指针前的任何磁带都是"空白";没有什么可阅读的(对于"空白"胶带,新的或空的缓冲区(。
仅写作时,该位置会自动为您更新。但是,如果您想读取已经写过的数据,则需要告诉它回去。
一个例外是文件格式。如果我们正在修改现有文件,我们可以在一个部分中更新固定长度的时间戳,然后立即读取一对表示"作者"字符串长度的字节,然后读取该字符串。为此,我们不需要seek
作为所有数据都是连续的,write
和read
的功能将自动移动文件(缓冲区(中的位置。
如果您的读取/写入不合格,则需要seek
。否则,它将无法阅读您要阅读的位置。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- Qt VTK交互风格的信号到小部件
- C++/Qt Valgrind 未初始化的字节
- Qt:从固定数量的字节到整数
- 如何从 Oracle 数据库中获取 qt 中 SQL 查询的传输字节大小?
- Qt TCP 套接字 - 写入超过 15 个字节
- 为什么当我使用双精度时,Qt<->Matlab 正确写入和读取我的字节,但存储 uint32 的字节不正确?
- 在 QByteArray 中插入字节 来自 QString - Qt C++
- 删除字节数组 : Qt 缓冲区之间的空字符 (\x00)
- QT QT QBuffer字节编写的字节无法读取
- VoIP:如何从QT多媒体中的相机中捕获实时音频/视频流字节
- 从字节数组快速转换为图像,QT可以以形式显示
- Qt套接字未等待写入字节
- Qt串行端口有时会丢失最后一个字节
- 控制QT中准备从声卡读取的字节数
- Qt是否有一种将字节转换为int的方法,反之亦然
- Qt:显示来自 QByteArray 的字节
- QT 串行发送一个字节
- Arduino将整数发送为两个字节,并将其显示在Qt中
- 在Qt中打印8字节整数时出错