gpt4 book ai didi

c++ - 通过 QTextStream 重复写入和读取 QBuffer

转载 作者:行者123 更新时间:2023-11-28 04:15:44 25 4
gpt4 key购买 nike

我正在尝试通过QTextStream 重复写入/读取QBuffer 对象。首先我构造两个对象:

QBuffer b;
b.open(QIODevice::ReadWrite);
QTextStream s(&b);
// Setup text stream here

然后我写下三个不同的信息部分并读回:

s << "Test" << 666 << endl << flush;
s.seek(0);
qDebug() << s.readAll();

s << "X" << endl << flush;
s.seek(0);
qDebug() << s.readAll();

s << "Test" << 777 << endl << flush;
s.seek(0);
qDebug() << s.readAll();

当然我没有得到我之前写的数据部分,但是累积的数据:

"Test666\n"
"Test666\nX\n"
"Test666\nX\nTest777\n"

我可以执行自适应搜索调用来获取正确的数据,但我希望QBuffer无限增长

我尝试在写入之间调用 s.reset(),但结果是一样的。直接在缓冲区上调用 reset()open()/close() 会产生损坏的结果(这是预期的,因为流被绕过了):

"Test666\n"
"X\nst666\n"
"Test777\n"

我或许可以为每个循环构建一个新缓冲区,打开它并将其附加到流,但那很慢。

这个用例是否有合适且快速的解决方案?

最佳答案

您可以直接使用QBuffer::buffer() 访问QBuffer 的内部QByteArray 存储,然后使用QByteArray 删除所有内容::清除()。然后手动seek()回到开头。

    QBuffer b;
b.open(QIODevice::ReadWrite);
QTextStream s(&b);

s << "Test" << 666 << endl << flush;
s.seek(0);
qDebug() << s.readAll();

b.buffer().clear();
s.seek(0);

s << "X" << endl << flush;
s.seek(0);
qDebug() << s.readAll();

b.buffer().clear();
s.seek(0);

s << "Test" << 777 << endl << flush;
s.seek(0);
qDebug() << s.readAll();
"Test666\n"
"X\n"
"Test777\n"

QTextStream 也有一个 constructor直接获取QByteArray并自动创建QBuffer,在这种情况下可能会节省一些代码。

关于c++ - 通过 QTextStream 重复写入和读取 QBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com