Неоднократно писать и читать в / из QBuffer через QTextStream
Я пытаюсь многократно писать и читать в / из QBuffer
объект через QTextStream
, Сначала я создаю оба объекта:
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"
Я мог бы создать новый буфер для каждого цикла, открыть его и присоединить к потоку, но это медленно.
Есть ли правильное и быстрое решение для этого варианта использования?
1 ответ
Вы можете получить доступ QBuffer
внутренний QByteArray
хранение непосредственно с QBuffer::buffer()
а затем удалите все с QByteArray::clear()
, Потом вручную 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
также есть конструктор, который принимает QByteArray
непосредственно и создает QBuffer
автоматически, что может сохранить немного кода в этом случае.