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

## Main Question or Discussion Point

Hi, I'm just wondering, usually when I output to file in C++ I just do like:

fout.open("output.txt",ios:ut);
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.

Related Programming and Computer Science News on Phys.org
chroot
Staff Emeritus
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:
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.

Hurkyl
Staff Emeritus
Gold Member
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.