Boost.Iostreams против перегрузки iostream/streambuf для битового потока ввода-вывода
Для моей текущей задачи мне нужна возможность чтения / записи (в основном на основе файлов) битовых потоков. Хотя это более или менее тривиальная задача, если она написана на стандартном C/C++, я хотел бы переписать код, используя более общий подход, перегружая и используя стандартный STL iostream или аналогичный, чтобы я мог написать что-то вроде
writeHeader();
{
ofstream outfile ("test.bin");
outfile << true; // Write 1 bit
outfile << false; // Write 1 bit
outfile << (char)0x42; // Write 8 bits
}
Однако я не уверен, по какой дороге идти:
- Используя Boost.IOStream или
- Получите непосредственно из streambuf или iostream.
До сих пор мне никогда не приходилось создавать / предоставлять свои собственные потоковые классы, но я хочу улучшить свои знания...
Может быть, кто-то может дать некоторые указатели или подсказки, какой способ предпочитать и почему!?
Спасибо!
1 ответ
Лучше всего сделать новый класс потока и класс буфера потока. Используйте пользовательский класс потока для перегрузки операторов вывода, чтобы поместить один бит в пользовательский буфер потока.
Причина в том, что C++ не поддерживает меньшие объекты, чем один байт (char
). Даже bool
Тип не является одним битом, так как он должен быть адресуемым.