13 Eylül 2017 Çarşamba

iostreams filtering_ostream Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/iostreams/filtering_stream.hpp>    
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/gzip.hpp>
filtering_ostream aslında bir filtering_streambuf nesnesidir. Şöyledir yani bir typdef'tir.


typedef boost::iostreams::filtering_streambuf<boost::iostreams::out> 
  filtering_ostream;
Constructor
Şöyle yaparız.
bo::filtering_ostream out;
push metodu
Örnek
Sıkıştırılmış veriyi açmak için şöyle yaparız. filtering_ostream nesnesine bir gzip_decompressor ve buffer geçilir.
namespace io = boost::iostreams; //<-- good practice
typedef std::vector<char> buffer_t;

void CompressionUtils::Inflate(const buffer_t &compressed,
                               buffer_t &decompressed)
{
  io::filtering_ostream os;

  os.push(io::gzip_decompressor());
  os.push(io::back_inserter(decompressed));
  //Write data to output stream
  io::write(os, compressed.data(), compressed.size());
}
Örnek
Sıkıştırmak için şöyle yaparız.
std::ofstream ofile("hello.gz", std::ios_base::out | std::ios_base::binary);
bo::filtering_ostream out;
out.push(bo::gzip_compressor()); 
out.push(ofile); 
out << "This is a gz file\n";
Okumak için şöyle yaparız.
std::ifstream ifile("hello.gz", std::ios_base::in | std::ios_base::binary);
bo::filtering_streambuf<bo::input> in;
in.push(bo::gzip_decompressor());
in.push(ifile);
boost::iostreams::copy(in, std::cout);

Hiç yorum yok:

Yorum Gönder