Мне нужен аккуратный потоковый буфер для поиска в моем приложении, и у меня уже есть boost :: asio, интегрированный с асинхронными сокетами и таймерами. Я хотел также попытаться интегрировать буфер, который можно использовать в качестве потока, также с возможностями поиска. Я попытался обернуть boost :: asio :: streambuf в std :: iostream, и функции Tell возвращают -1, и я получаю исключение при поиске.
Я использую это неправильно, или я использую неправильный объект буфера для того, что мне нужно?
BufferTest.cpp
#include <boost/asio/streambuf.hpp>
#include <iostream>
/**
* Main when we come in
*/
int main( int argc, char *argv[] )
{
boost::asio::streambuf streambuf;
std::iostream stream( &streambuf );
try
{
stream.exceptions ( std::iostream::failbit | std::iostream::badbit );
stream.write( "hello", 5 );
stream.write( "test", 4 );
std::cout << "Step 1" << std::endl;
char buffer[ 9 ];
stream.read( buffer, 9 );
std::cout << "Step 2" << std::endl;
std::cout << "The worst: " << std::string( buffer, 9 ) << std::endl;
std::cout << "Step 3" << std::endl;
stream.seekg( 0 );
std::cout << "Step 4" << std::endl;
stream.read( buffer, 9 );
std::cout << "The worst: " << std::string( buffer, 9 ) << std::endl;
}
catch( const std::exception &e )
{
std::cerr << "Exception: " << e.what() << std::endl;
}
}
выход :
$ ./bin/buffer_test
Step 1
Step 2
The worst: hellotest
Step 3
Exception: basic_ios::clear: iostream error