Boost logo

Boost :

Subject: Re: [boost] Interest in simple unformatted binary stream I/O?
From: Mathias Gaunard (mathias.gaunard_at_[hidden])
Date: 2011-04-29 03:52:20


On 24/04/2011 14:12, Beman Dawes wrote:
> There have been many requests on Boost and various C++ newsgroups for
> unformatted binary I/O. For example, in 2003 Neal Becker wrote:
>
> I wonder if anyone has code for implementing unformatted I/O?
> What I have in mind is
> for the simple case where the application that reads data knows
> the data types, so
> this is not as complicated as the general marshalling situation.
>
> This proposal provides a very simple solution that works with standard
> library input and output streams. The one caveat is that the stream
> must be opened with filemode std::ios_base::binary to avoid certain
> data values being treated as line endings.
>
> int main()
> {
> fstream f("binary_stream_example.dat",
> std::ios_base::trunc | std::ios_base::in | std::ios_base::out |
> std::ios_base::binary);
>
> int32_t x = 0x01020304;
> int32_t y = 0;
>
> f<< bin(x); // write 4 bytes
> f.seekg(0);
> f>> bin(y); // read 4 bytes

I think it's a bad idea.

If you want to do that kind of thing, you should use the streambuf
abstraction directly, along with its sgetn and sputn member functions.
It will be much more efficient.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk