8.2 创建内核流
有时我们需要将内存中的一个字符串内的数字字符转换成二进制形式,或将一个二进制数据转换成字符保存在内存中的一个字符串内。C++系统的流库同样也为程序员提供了这种功能,执行这种操作的类的等级如图8—2所示。
我们关心的仍是istrstream类、ostrstream类和strstream类的构造函数,这些构造函数建立起一个内核流对象,然后我们可以象使用文件流那样使用iostream类及其所有的基类中提供的成员函数进行内核流的提取和插入。
istrstream类的构造函数是:
istrstream::istrstream(char *);
istrstream::istrstream(char *,int);
这两个构造函数的第一个能数指定创建istrstream类的一个对象时,要进行提取操作的串,第一个构造函数所使用的串长由串中的NUL字符来决定,第二个构造函数只使用第二个参数所指定的串长度。
例8_6:EX8_6.CPP。
例8_7:通过直接调用istrstream的构造函数建立不同的流对象,这个程序将命令行输入的数字参数转换到一个整数数组中EX8_7.CPP。
ostrstream类的构造函数是
ostrstream::ostrstream(char *,int,int=ios::out);
ostrstream::ostream();
第二个构造函数动态地建立一个保存转换后的串的缓冲区;第一个构造函数的每一个参数为指向缓冲区的指针,第二个参数指定缓冲区的长度,第三个是操作方式字,如果这个参数的值为ios::app或ios::ate,则建立这个对象时,提取和插入指针定位在NUL字符上,插入的字符序列从NUL字符开始存储。
例8_8:EX8_8.CPP。
ostrstream类的成员函数
int ostrstream::pcount();
返回缓冲区中当前已保存的字节数,而成员函数
char *ostrstream::str();
返回缓冲区的地址。一旦调用了这个函数,ostrstream类的对象就不再和这个缓冲区相联结。如果在建立ostrstream类的对象时使用了缺省构造函数,这时在程序使用成员函数str()获得的缓冲区不再使用时应使用delete释放它。
strstream类的构造函数是
strstream::strstream(char *,int,int);
strstream::strstream();
第二个构造函数类似于ostrstream::ostrstream(),动态地建立进行插入所需的缓冲区;第一个构造函数的前两个参数指定缓冲区和所使用的缓冲区的大小,第三个参数为方式字,可以指定ios::out、ios::in或ios::app、ios::ate等在ios类中定义的有意义的方式。当指定了ios::app或ios::ate时,提取和插入指针定位到NUL字符上,strstream类提供了对一个缓冲区既进行提取又进行插入的能力。
除了内核流是建立在内存中之外,内核流的概念和文件流的概念一样,因此,可以使用文件流使用的成员函数操作内核流,例如,使用seekg,read,write等。