Класс CmaStream переопределяет операторы потокового ввода и вывода, чтобы сократить код сохранения данных.

    CmaStream (maType type, maString location);

Создание нового потока. Поле type - объединение файловых констант - указывает тип потока(ввод/вывод, текстовый/бинарный, файл/буфер/приложение). Location - расположение потока (имя файла, строка запуска приложения). Файл при этом не открывается.

    СmaStream(ImaStream* stream);

Присоединяет класс-оболочку к существующему потоку.

    void Open();
    void Close();

Функции открывают и закрывают поток соответственно. Использовать эти функции не обязательно. Однако для некоторых типов потоков (например, файлов) имеет смысл открыть поток один раз перед многократным обращением к функциям ввода-вывода, а по завершении работы закрыть поток. Тогда поток не будет открываться и закрываться при чтении/записи каждой порции данных, что повысит эффективность операции.

    void Flush();

Функция принудительно выводит в поток содержимое внутреннего буфера (если таковой определён для данного типа потоков).

    maStreamOptions GetOptions();
    void SetOptions(maStreamOptions opt);

Функции обеспечивают доступ к опциям ввода-вывода. Тип maStreamOption описан в описании простых типов.

    CmaStream& operator<< (int data);
    CmaStream& operator<< (double data);
    CmaStream& operator<< (maString data);
    CmaStream& operator<< (CmaCell &data);
    CmaStream& operator<< (CmaList &data);
    CmaStream& operator<< (CmaMatrix &data);

    CmaStream& operator>> (int data);
    CmaStream& operator>> (double data);
    CmaStream& operator>> (maString data);
    CmaStream& operator>> (CmaCell &data);
    CmaStream& operator>> (CmaList &data);
    CmaStream& operator>> (CmaMatrix &data);

Основные операторы ввода и вывода. В операторах чтения классов:

- если класс-оболочка не создан, то он будет создан с нулевым указателем на компонент.
- если компонент не создан (равен нулю), то из потока будет считан CLSId, по нему создан компонент, последний считан из потока и укзатель на интерфейс записан в класс-оболочку.
- если компонент создан, но в потоке очередной компонент имеет CLSId, не равный CLSId компонента, то чтение из потока не будет произведено.

    CmaStream& newLine(CmaStream& rvalue);
    CmaStream& newField(CmaStream& rvalue)

Переход к новой строке и вставка разделителя значений соответственно. Что именно будет записано в поток, определяется опциями ввода-вывода. Если поток не текстовый, то вызовы игнорируются.

    void PrintF (maString format, ...);

Функция является аналогом сиандартной функции wprintf для потока.