On Tue, 25 Sep 2012 18:08:44 +0000, Justin Whear wrote: > On Tue, 25 Sep 2012 03:25:37 +0200, TJB wrote: > >>> Since you're already set up with the Stream interface, try creating a >>> MemoryStream instead of a BufferedFile. Write to the stream just as >>> you are now, then use the .data() property (on MemoryStream's >>> superclass, >>> TArrayStream) to get an array of raw bytes. You can feed this array >>> into the compress function in std.zlib to produce a new (hopefully >>> shorter) >>> array of bytes that contains the compressed data. Simply write this >>> compressed data to a file with `fout.writeExact(compressed.ptr, >>> compressed.length)` and you're done. >>> >>> Since uncompress works better if you know the exact size of the >>> uncompressed data, you might also consider writing the uncompressed >>> size of the data to your output file before the compressed data. >>> >>> Justin >> >> Ok, I think I get it. Can you help me set up the first part, >> writing to the MemoryStream? >> >> TJB > > I wrote up a quick example program and pasted it here: > http://dpaste.dzfl.pl/f1699d07 > > Hope that helps you out.
I should point out that in my example, the writing to the MemoryStream is not strictly necessary. I could have simply cast the foo array to an array of bytes and passed that into the compress function. But if you're already set up for writing raw data into a stream, the MemoryStream will help you minimize code changes as well as facilitate more complex scenarios.