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