Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
#include <boost/archive/binary_oarchive.hpp>
EOS Portable Archives kütüphanesini ilk burada gördüm. binary_oarchive sınıfı farklı platformlar arasında portable olmayabliir. Açıklaması şöyleThe thing about the binary archive is that it was designed for optimal speed and not for portability across different platforms. This is where the EOS portable archive fills the gap, bringing both execution speed and a platform independent space-efficient binary packing.Constructor - ofstream
Şöyle yaparız. Dosyayı std::ios::binary olarak açıp açmama konusunda emin değilim.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız. Sanırım sadece lvalue değişkenler ile çalışıyor.
Şöyle yaparız.
std::ofstream ofs("saved.bin");
boost::archive::binary_oarchive oa (ofs);
Constructor - ostringstreamÖrnek
Şöyle yaparız.
std::ostringstream oss;
boost::archive::binary_oarchive oa (oss);
ÖrnekŞöyle yaparız.
template<class Archive, class Object>
std::string serialise_to_string(Object const& o)
{
auto os = std::ostringstream(std::ios::binary);
Archive arch { os, boost::archive::no_header };
arch << BOOST_SERIALIZATION_NVP(o);
return os.str();
};
std::ostream& dump(std::ostream& os, std::string const& s)
{
const char *sep = "";
for (uint8_t ch : s) {
std::cout << sep << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<int>(ch);
sep = " ";
}
return os;
}
Foo foo;
auto s1 = serialise_to_string<boost::archive::binary_oarchive>(foo);
dump(std::cout, s1) << std::endl << std::endl;
Constructor - ostringstream + flagsŞöyle yaparız.
static auto const flags = boost::archive::no_header | boost::archive::no_tracking;
std::ostringstream oss;
boost::archive::binary_oarchive oa(oss, flags);
Constructor - stringstreamŞöyle yaparız.
stringstream oss(ios_base::out|ios_base::binary);
boost::archive::binary_oarchive oa(oss);
oa << boost::serialization::make_nvp("Connections", conn);
operator << metodu - primitiveŞöyle yaparız. Sanırım sadece lvalue değişkenler ile çalışıyor.
int i = 1
oa << i;
operator << metodu - classŞöyle yaparız.
Foo foo;
oa << foo;
operator << metodu - STL
Şöyle yaparız.vector<ObjectDTO> objects = ...;
oa << objects;
Diğer
Sıkıştırma için şöyle yaparız. Burada archive önce stringstream'e yazar. Daha sonra bu stream filtering_ostream nesnesine kopyalanır. filtering_ostream de sonucu vector'e yazar. Yani bir sürü kopyalama olduğu için çok verimli değil.
Sıkıştırma için şöyle yaparız. Burada archive önce stringstream'e yazar. Daha sonra bu stream filtering_ostream nesnesine kopyalanır. filtering_ostream de sonucu vector'e yazar. Yani bir sürü kopyalama olduğu için çok verimli değil.
static auto const flags = boost::archive::no_header | boost::archive::no_tracking;
std::stringstream ss;
{
boost::archive::binary_oarchive oa(ss, flags);
oa << foo;
}
std::vector<char> compressed;
{
boost::iostreams::filtering_ostream fos;
fos.push(boost::iostreams::bzip2_compressor());
fos.push(boost::iostreams::back_inserter(compressed));
boost::iostreams::copy(ss, fos);
}
Hiç yorum yok:
Yorum Gönder