streambuf相关

##streambuf简介 在C++中所有的stream对象内部都有一个stream buffer,不管这个流对象是缓存还是不缓存的。

All stream objects, no matter whether buffered or unbuffered, have an associated stream buffer: Some stream buffer types may then be set to either use an intermediate buffer or not. 摘自streambuf

上面的stream buffer,实际上在stream对象内存存储的就是一个streambuf指针。这个streambuf有个很强大的特性,将streambuf指针通过操作符"<<"和另一个stream对象连接起来就可以达到将streambu中的全部数据输出到另一个stream对象的效果。

下面是两个简单的示例:

###示例1 将ifsream读取的stype.cpp的内容全部输出到console

<!-- lang: cpp -->
#include<fstream>  
#include<iostream>  
using namespace std;  
int main()  
{  
	ifstream in("stype.cpp");  
	assure(in,"stype.cpp"); // 确保文件被正确打开  
	cout<<in.rdbuf(); // rdbuf返回streambuf指针 
	return 0;  
}

###示例2 下载LICENSE_1_0.txt文件,并将内容全部输出至console。以下示例代码摘自开源项目avhttp的README.md,这里的http_steam继承自steambuf,有下载功能。

<!-- lang: cpp -->
#include <iostream>
#include "avhttp.hpp"

int main(int argc, char* argv[])
{
    try
    {
        boost::asio::io_service io;
        avhttp::http_stream h(io);

        h.open("http://www.boost.org/LICENSE_1_0.txt");
        std::cout << &h;
    }
    catch (std::exception& e)
    {
        std::cerr << "Error:" << e.what() << std::endl;
    }

    return 0;
}

转载于:https://my.oschina.net/chen0dgax/blog/168500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值