Outputting to file in the most compressed form (c++)

  • Context: C/C++ 
  • Thread starter Thread starter maverick_starstrider
  • Start date Start date
  • Tags Tags
    Compressed File Form
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
3 replies · 3K views
maverick_starstrider
Messages
1,118
Reaction score
7
Hi, I'm just wondering, usually when I output to file in C++ I just do like:

fout.open("output.txt",ios::out);
fout.precision(13);
fout << data1 << " " << data2 << " " << data3 << endl;

or something to that effect. i.e. I use c++'s file streams. However, for my current application minimizing space is an absolute must. Therefore, are there other ways of outputting this same data (columns of 3 doubles) to a file that will create a smaller file? I've experimented with fprintf and such but it seems to create the same sized file. Any help is greatly appreciated.
 
Physics news on Phys.org
Use zlib, probably the most common compression library on the planet.

If you want a C++ stream version of it, try gzstream

- Warren
 
Last edited:
chroot said:
Use zlib, probably the most common compression library on the planet.

If you want a C++ stream version of it, try gzstream

- Warren

I can't actually use any third party libraries because I have no control over the implementation, or the compiler.
 
maverick_starstrider said:
I can't actually use any third party libraries because I have no control over the implementation, or the compiler.
Are those really problems?



Anyways, if space really, really is a concern, then you shouldn't be writing anything in human readable text formats, because that is a huge waste of space. Use the C++ ostream::write or the fwrite functions to write raw bytes, e.g.

Code:
double x;
double y[3];
fout.write(static_cast<const char*>(&x), sizeof(double));
fout.write(static_cast<const char*>(y), sizeof(y));

and read similarly. If the file needs to be transferable between different computers that lay things out differently in memory, then you need to do a little more work to write things out in a portable format.