2011-04-13 12 views
5

Quiero escribir una función de serialización para una clase que opcionalmente puede comprimir los datos. Me gustaría utilizar las instalaciones de compresión proporcionadas en boost :: iostreams. ¿Alguien sabe como hacer esto?Uso de boost :: archive con boost :: iostreams para comprimir datos

struct X 
{ 
    X() {} 

    template<class Archive> 
    void serialize(Archive & ar, const unsigned int version) 
    { 
     ar & compression; 
     if(compression == 0) 
     { 
      ar & data; 
     } 
     else if(compression == 1) 
     { 
      // use boost::iostream compression 
      // facilities to serialize data 
     } 
    } 

    int compression; 
    std::vector<int> data; 
}; 

Respuesta

0

La única forma que veo de hacerlo es comprimir los datos en primer lugar y luego usar ar.load_binary y ar.save_binary. Para comprimir los datos, puede usar un flujo de filtrado con std :: ostringstream como receptor y un filtro de compresión apropiado.

¿Alguna razón por la que no desea empujar la compresión hacia abajo de la pila (es decir, crear su archivo sobre una secuencia de compresión)?

Cuestiones relacionadas