2015-06-07 3 views
1

У меня есть один QIODevice, который получает данные из неопределенного источника. Что я хочу сделать, это «Дамп» всех данных в файл, отправляемый с QIODevice, но если я прочитаю, то другой обработчик, зависящий от исходных данных, изменится.Данные по трубопроводам QIODevice

В основном то, что я хочу

void piping(QIODevice* Data) 
{ 
    if (outgoingData) 
    { 
     qDebug()<<Data->readAll(); 
    } 

    // gets nothing as readAll has already consumed all data 
    dependentOn(Data); 
} 

функция dependentOn не определяется мной, поэтому я не могу изменить его определение.

+0

Вы можете попробовать сохранить позицию, чтение, а затем стремится вернуться к сохраненной позиции. Действительно зависит от типа устройства. Вы можете пересмотреть свой дизайн, чтобы прочитать данные и передать массив байтов всем, кто его интересует. –

+0

Да, но проблема заключается в обработке последовательного устройства, например: socket, я даже не могу его эмулировать, 'dependOn' не определяется мной, поэтому я не могу изменить его определение. – m61566

+0

[QBuffer] (http://doc.qt.io/qt-5/qbuffer.html) может работать. –

ответ

2

qint64 QIODevice::peek(char * data, qint64 maxSize) - это то, что вы хотите.

Из документации:

qint64 QIODevice :: прятки (символьные * данные, qint64 MaxSize)

Считывает в большинстве MaxSize байт из устройства в данные, без боковых эффектов (то есть, если вы вызываете read() после peek(), вы получите те же данные ). Возвращает количество прочитанных байтов. Если возникает ошибка, например при попытке просмотреть устройство, открытое в режиме WriteOnly, функция возвращает -1.

Ссылка: http://doc.qt.io/qt-5/qiodevice.html#peek

+0

Есть ли у peek другой внутренний указатель? то есть peek (data, 100) вернет первые 100 байт, а затем заглянет (данные, 100) вернется дальше? – m61566

+0

Я проверил тест, у него нет внутреннего указателя, поэтому я не могу читать байты по байтам, мне нужно создать буфер размером 100000 байт, что является пустой тратой памяти. – m61566

+0

См. Перегрузку: http://doc.qt.io/qt-5/qiodevice.html#peek-2 –

Смежные вопросы