На этом шаге рассмотрим класс QBuffer.
Класс QBuffer унаследован от класса QIODevice и представляет собой эмуляцию файлов в памяти компьютера (memory mapped files). Это позволяет записывать информацию в оперативную память и использовать объекты как обычные файлы (открывать при помощи метода open() и закрывать методом close()). При помощи методов write() и read() можно считывать и записывать блоки данных, например:
//установим код IBM 866 для вывода русских символов QTextCodec *utfcodec = QTextCodec::codecForName("IBM 866"); QTextCodec::setCodecForLocale(utfcodec); QByteArray arr; QString str; //данные сохраняются внутри объекта класса QByteArray QBuffer buffer(&arr); //открываем для записи buffer.open(QIODevice::WriteOnly); //записываем данные в buffer используя поток данных QDataStream out(&buffer); out << QString("Мама мыла раму!"); //закрываем buffer buffer.close(); //открываем для чтения buffer.open(QIODevice::ReadOnly); //читаем данные из buffer в QString QDataStream in(&buffer); in >> str; //выводим строку на экран qDebug() << str;
Результат работы приложения можно увидеть на рисунке 1.
Рис.1. Пример работы с объектом класса QBuffer
Файлы приложения можно взять здесь.
При помощи метода buffer() можно получить константную ссылку на внутренний объект QByteArray, а посредством метода setBuffer() — устанавливать другой объект QByteArray для его использования в качестве внутреннего.
Метод data() идентичен методу buffer(), но метод setData() отличается от setBuffer() тем, что получает не указатель на объект QByteArray, а константную ссылку на него для копирования его данных.
Класс QBuffer полезен для проведения операций кэширования. Например, можно считывать файлы растровых изображений в объекты класса QBuffer, а затем, по необходимости, получать данные из них.
На следующем шаге рассмотрим класс QTemporaryFile.