我使用 gzip_compressor() 来压缩输出文件。为此,我使用了两种方法。共同的部分是
std::ofstream traceOut;
traceOut.open("log.gz", std::ios_base::out);
struct traceRec {
traceRec(uint64_t c) : cycle(c) {};
uint64_t cycle;
};
void writeTrace(traceRec &rec)
{
boost::iostreams::filtering_ostream o;
o.push(boost::iostreams::gzip_compressor());
o.push(traceOut);
// METHOD 1 OR 2
}
方法一
我用
o.write(reinterpret_cast<const char*>(&rec.cycle), sizeof(rec.cycle));
使用此实现,文件大小为 380K!
方法二
我用
traceOut << rec.cycle << std::endl;
使用此实现,文件大小为 78K!
那么为什么他们有不同的大小?另一件事是,如果我不使用 gzip_compressor 并直接写入文件
std::ofstream traceOut;
traceOut.open("log.gz", std::ios_base::out);
...
traceOut << rec.cycle << std::endl;
文件大小为 78K。
所以有两个问题:
1-使用或不使用gzip_compressor
对文件大小没有影响
2-使用不同的实现gzip_compressor
产生不同的文件大小
有什么想法吗?