Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

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

  1. Sep 22, 2009 #1
    Hi, I'm just wondering, usually when I output to file in C++ I just do like:

    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.
  2. jcsd
  3. Sep 22, 2009 #2


    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    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: Sep 22, 2009
  4. Sep 22, 2009 #3
    I can't actually use any third party libraries because I have no control over the implementation, or the compiler.
  5. Sep 22, 2009 #4


    User Avatar
    Staff Emeritus
    Science Advisor
    Gold Member

    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 (Text):

    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.
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook