Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Tutorial

Boost , ,

Tutorial

2.2.2. Filter Usage Examples

Фильтры обычно используются в сочетании с потоками фильтров и потоковыми буферами. Например, предположим, что у вас есть какой-то текст, который вы хотите сжимать, а затем кодировать Base64, а затем писать в файл. Если у вас есть соответствующие Выходные фильтры компрессор и base64_encoder, вы можете сделать это следующим образом:[1]

#include <boost/iostreams/device/file_descriptor.hpp>
#include <boost/iostreams/filtering_stream.hpp>
namespace io = boost::iostreams;
int main()
{   
    io::filtering_ostream out;
    out.push(compressor());
    out.push(base64_encoder());
    out.push(file_sink("my_file.txt"));
    // write to out using std::ostream interface
}

Как и все фильтрации потоков и потоковых буферов, фильтрация_ostream поддерживает внутреннюю цепочку фильтров и устройств. (См. также chain.) Когда данные пишутся в этой цепочке, они течет через компоненты в том порядке, в каком они были перенесены. Последний компонент, выдвинутый в приведенном выше примере, может быть любой моделью Sink, включая std::ostream, такую как std::cout.

Предположим, вы хотите восстановить исходные данные. Если у вас есть соответствующие InputFilters decompressor и base64_decoder, вы можете выполнить это следующим образом:[2]

#include <boost/iostreams/device/file.hpp>
#include <boost/iostreams/filtering_stream.hpp>
namespace io = boost::iostreams;
int main()
{   
    io::filtering_istream in;
    in.push(decompressor());
    in.push(base64_decoder());
    in.push(file_source("my_file.txt"));
    // read from in using std::istream interface
}

Здесь вы видите другое использование цепи фильтров. Когда данные считываются из цепи, они течет через компоненты в порядке обратной, начиная с компонента, толкаемого последним. Последний компонент может быть любой моделью Источник, включая std::istream, такой как std::cin.


[1] Строго говоря, было бы лучше использовать file_descriptor_sink вместо file_sink здесь, потому что file_descriptor_sink никогда не выполняет конверсионный код.

[2] Строго говоря, было бы лучше использовать file_descriptor_source вместо file_source здесь, потому что file_descriptor_source никогда не выполняет код преобразования.


Статья Tutorial раздела может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 06:08:56/0.0034129619598389/0