Oracle® Solaris Studio 12.4:C++ 用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

13.10.2 使用 streambuf 对象

从来不创建实际的 streambuf 对象,而是只创建从 streambuf 类派生的类的对象。示例有 filebufstrstreambuffilebuf(3CC4) 和 ssbuf(3) 手册页中对它们进行了介绍。高级用户可能想从 streambuf 派生自己的类,以便提供特定设备的接口或提供基本缓冲以外的功能。sbufpub(3CC4) 和 sbufprot(3CC4) 手册页中讨论了如何执行此操作。

除了创建自己的特殊种类的 streambuf 外,您可能还想通过访问与 iostream 关联的 streambuf 来访问公用成员函数(如以上手册页中所述)。此外,每个 iostream 都有采用 streambuf 指针的已定义插入器和提取器。插入或提取 streambuf 时,会复制整个流。

以下示例显示了可用来执行之前讨论的文件复制的另一种方法,为提高清晰性,该方法中省略了错误检查:

ifstream fromFile("thisFile");
ofstream toFile ("thatFile");
toFile << fromFile.rdbuf();

如之前一样打开输入和输出文件。每个 iostream 类都有成员函数 rdbuf,它返回指向与其关联的 streambuf 对象的指针。如果是 fstream,则 streambuf 对象是类型 filebuf。与 fromFile 关联的整个文件都复制到(插入)与 toFile 关联的文件。最后一行也可以改写如下:

fromFile >> toFile.rdbuf();

然后源文件被提取到目标中。两种方法是完全等同的。