acl  3.5.3.0
acl::istream类 参考

#include <istream.hpp>

+ 类 acl::istream 继承关系图:
+ acl::istream 的协作图:

Public 成员函数

 istream (void)
 
virtual ~istream (void)
 
int read (void *buf, size_t size, bool loop=true)
 
bool readtags (void *buf, size_t *inout, const char *tag, size_t len)
 
bool gets (void *buf, size_t *size_inout, bool nonl=true)
 
bool read (long long int &n, bool loop=true)
 
bool read (int &n, bool loop=true)
 
bool read (short &n, bool loop=true)
 
bool read (char &ch)
 
bool read (string &s, bool loop=true)
 
bool read (string *s, bool loop=true)
 
bool read (string &s, size_t max, bool loop=true)
 
bool read (string *s, size_t max, bool loop=true)
 
bool gets (string &s, bool nonl=true, size_t max=0)
 
bool gets (string *s, bool nonl=true, size_t max=0)
 
bool readtags (string &s, const string &tag)
 
bool readtags (string *s, const string &tag)
 
int getch (void)
 
int ugetch (int ch)
 
bool gets_peek (string &buf, bool nonl=true, bool clear=false, int max=0)
 
bool gets_peek (string *buf, bool nonl=true, bool clear=false, int max=0)
 
bool read_peek (string &buf, bool clear=false)
 
bool read_peek (string *buf, bool clear=false)
 
int read_peek (void *buf, size_t size)
 
bool readn_peek (string &buf, size_t cnt, bool clear=false)
 
bool readn_peek (string *buf, size_t cnt, bool clear=false)
 
istreamoperator>> (string &s)
 
istreamoperator>> (long long int &n)
 
istreamoperator>> (int &n)
 
istreamoperator>> (short &n)
 
istreamoperator>> (char &ch)
 
- Public 成员函数 继承自 acl::stream
 stream (void)
 
virtual ~stream (void)=0
 
bool close (void)
 
bool eof (void) const
 
void clear_eof (void)
 
bool opened (void) const
 
ACL_VSTREAMget_vstream (void) const
 
ACL_VSTREAMunbind (void)
 
bool set_ctx (void *ctx, const char *key=NULL, bool replace=true)
 
void * get_ctx (const char *key=NULL) const
 
void * del_ctx (const char *key=NULL)
 
void set_rw_timeout (int n)
 
void set_time_unit (time_unit_t unit)
 
int get_rw_timeout (void) const
 
stream_hooksetup_hook (stream_hook *hook)
 
stream_hookget_hook (void) const
 
stream_hookremove_hook (void)
 
stringget_buf (void)
 
dbuf_poolget_dbuf (void)
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::stream
void open_stream (bool is_file=false)
 
void reopen_stream (bool is_file=false)
 
- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 
- Protected 属性 继承自 acl::stream
stream_hookhook_
 
ACL_VSTREAMstream_
 
stringbuf_
 
dbuf_pooldbuf_
 
void * default_ctx_
 
std::map< string, void * > * ctx_table_
 
bool eof_
 
bool opened_
 

详细描述

输入流操作类,如果想确切知道输入流是否关闭或出错或读到了文件流的 尾部,应通过调用 stream->eof() 来进行判断

在文件 istream.hpp15 行定义.

构造及析构函数说明

◆ istream()

acl::istream::istream ( void  )
inline

在文件 istream.hpp18 行定义.

18 {}

◆ ~istream()

virtual acl::istream::~istream ( void  )
inlinevirtual

在文件 istream.hpp19 行定义.

19 {}

成员函数说明

◆ getch()

int acl::istream::getch ( void  )

从输入流中读一个字节数据

返回
{int} 所读字节的 ASCII 码值,如果返回值为 -1 则表示对方关闭或 读出错

◆ gets() [1/3]

bool acl::istream::gets ( void *  buf,
size_t *  size_inout,
bool  nonl = true 
)

从输入流中读到一行数据

参数
buf{void*} 用户缓冲区
size_inout{size_t*} 作为参数时 *size_inout 表示缓冲 buf 的空间大小,函数返回后记录存储于 buf 中的数据长度
nonl{bool} 如果为 true 则会将读到的一行数据尾部的 "\r\n" 或 "\n" 去掉,*size_inout 存储的数据长度是去掉 "\r\n" 或 "\n" 后 的长度;否则,保留数据行中的 "\r\n" 或 "\n",同时 *size_inout 存 储的是包含 "\r\n" 或 "\n" 的数据长度
返回
{bool} 是否读到了一行数据, 出错则返回 false; 对文件输入流而 言,如果读到的数据是最后一部分数据且这部分数据不含 "\r\n" 或 "\n" 则也会返回 false, 调用者需要检查 *size_inout 值是否大于 0 来确定是否读到了最后一部分数据

◆ gets() [2/3]

bool acl::istream::gets ( string s,
bool  nonl = true,
size_t  max = 0 
)

从输入流中读一行数据至缓冲区中

参数
s{string&} 缓冲区,内部会首先自动清空该缓冲区
nonl{bool} 是否保留所读行数据中的 "\r\n" 或 "\n"
max{size_t} 当该值 > 0 时,该值限定了所读到行的最大值,当 接收到数据行长度大于该值时,则仅返回部分数据,同时内部会记录警告; 当该值 = 0 时,则不限制行数据长度
返回
{bool} 是否读到了一行数据 1)如果返回 true 则说明读到了完整一行数据;如果该行数据中只有 "\r\n" 或 "\n",则 s 的内容为空,即:s.empty() == true 2)如果返回 false 则说明读关闭且未读到一行数据,此时 s 中有可能 存储着部分数据,需要用 if (s.empty() == true) 判断一下

◆ gets() [3/3]

bool acl::istream::gets ( string s,
bool  nonl = true,
size_t  max = 0 
)

◆ gets_peek() [1/2]

bool acl::istream::gets_peek ( string buf,
bool  nonl = true,
bool  clear = false,
int  max = 0 
)

尝试性从输入流中读取一行数据

参数
buf{string&} 缓冲区
nonl{bool} 是否保留所读行数据中的 "\r\n" 或 "\n"
clear{bool} 是否内部自动清空 buf 缓冲区
max{int} 当该值 > 0 时则设置所读行数据的最大长度以避免本地 缓冲区溢出
返回
{bool} 是否读了一行数据; 如果返回 false 并不表示输入 流结束,只是表示未读到一个完整行数据,应该通过调用 stream->eof() 来检查输入流是否关闭,另外,如果仅读到了部分数据,则 buf 会存储 这些部分数据 注意:为了防止 buf 缓冲区溢出,调用者调用该方法获得的数据即使不够 一行数据,应尽量取出 buf 中的数据然后将 buf->clear(),以防止 buf 内存过大导致缓冲区溢出

◆ gets_peek() [2/2]

bool acl::istream::gets_peek ( string buf,
bool  nonl = true,
bool  clear = false,
int  max = 0 
)

◆ operator>>() [1/5]

istream& acl::istream::operator>> ( string s)

◆ operator>>() [2/5]

istream& acl::istream::operator>> ( long long int &  n)

◆ operator>>() [3/5]

istream& acl::istream::operator>> ( int &  n)

◆ operator>>() [4/5]

istream& acl::istream::operator>> ( short &  n)

◆ operator>>() [5/5]

istream& acl::istream::operator>> ( char &  ch)

◆ read() [1/9]

int acl::istream::read ( void *  buf,
size_t  size,
bool  loop = true 
)

从输入流中读数据

参数
buf{void*} 用户缓冲区
size{size_t} 用户缓冲区长度
loop{bool} 是否读满 size 后才返回
返回
{int} 读操作结果, -1 表示关闭或出错, > 0 表示成功

◆ read() [2/9]

bool acl::istream::read ( long long int &  n,
bool  loop = true 
)

从输入流中读一个 64 位整数

参数
n{acl_int64&} 64 位整数
loop{bool} 是否阻塞式读完8个字节
返回
{bool} 是否读取成功

◆ read() [3/9]

bool acl::istream::read ( int &  n,
bool  loop = true 
)

从输入流中读一个 32 位整数

参数
n{int&} 32 位整数
loop{bool} 是否阻塞式读完4个字节
返回
{bool} 是否读取成功

◆ read() [4/9]

bool acl::istream::read ( short &  n,
bool  loop = true 
)

从输入流中读一个 16 位整数

参数
n{short&} 16 位整数
loop{bool} 是否阻塞式读完2个字节
返回
{bool} 是否读取成功

◆ read() [5/9]

bool acl::istream::read ( char &  ch)

从输入流中读取一个字节

参数
ch{char&}
返回
{bool} 读取是否成功

◆ read() [6/9]

bool acl::istream::read ( string s,
bool  loop = true 
)

从输入流中读数据至缓冲区中

参数
s{string*} 缓冲区,内部会首先自动清空该缓冲区
loop{bool} 是否阻塞式读满整个缓冲,缓冲区 的容量为 s.capacity()
返回
{bool} 读数据是否成功

◆ read() [7/9]

bool acl::istream::read ( string s,
bool  loop = true 
)

◆ read() [8/9]

bool acl::istream::read ( string s,
size_t  max,
bool  loop = true 
)

从输入流中读数据至缓冲区中

参数
s{string*} 缓冲区,内部会首先自动清空该缓冲区
max{size_t} 希望读到的数据的最大值
loop{bool} 是否读到要求的 max 字节数为止
返回
{bool} 读数据是否成功

◆ read() [9/9]

bool acl::istream::read ( string s,
size_t  max,
bool  loop = true 
)

◆ read_peek() [1/3]

bool acl::istream::read_peek ( string buf,
bool  clear = false 
)

尝试性从输入流中读取数据

参数
buf{string&} 缓冲区
clear{bool} 函数开始时是否内部自动清空 buf 缓冲区
返回
{bool} 是否读到数据, 如果返回 false 仅 表示未读完所要求 的数据长度,应该通过调用 stream->eof() 来检查输入流是否关闭 注意:为了防止 buf 缓冲区溢出,调用者调用该方法获得的数据即使不够 一行数据,应尽量取出 buf 中的数据然后将 buf->clear(),以防止 buf 内存过大导致缓冲区溢出

◆ read_peek() [2/3]

bool acl::istream::read_peek ( string buf,
bool  clear = false 
)

◆ read_peek() [3/3]

int acl::istream::read_peek ( void *  buf,
size_t  size 
)

尝试性从输入流中读取数据

参数
buf{void*} 缓冲区
size{size_t} buf 缓冲区大小
返回
{int} 返回 -1 表示读出错或关闭,> 0 表示读到的数据长度, 如果返回 0 表示本次没有读到数据,可以继续读,当返回值 < 0 时, 可通过 eof() 判断流是否应该关闭

◆ readn_peek() [1/2]

bool acl::istream::readn_peek ( string buf,
size_t  cnt,
bool  clear = false 
)

尝试性从输入流中读取指定长度的数据

参数
buf{string&} 缓冲区
cnt{size_t} 要求读到的数据长度
clear{bool} 函数开始时是否内部自动清空 buf 缓冲区
返回
{bool} 是否读到所要求数据长度的数据, 如果返回 false 仅 表示未读完所要求的数据长度,应该通过调用 stream->eof() 来检查 输入流是否关闭 注意:为了防止 buf 缓冲区溢出,调用者调用该方法获得的数据即使不够 一行数据,应尽量取出 buf 中的数据然后将 buf->clear(),以防止 buf 内存过大导致缓冲区溢出

◆ readn_peek() [2/2]

bool acl::istream::readn_peek ( string buf,
size_t  cnt,
bool  clear = false 
)

◆ readtags() [1/3]

bool acl::istream::readtags ( void *  buf,
size_t *  inout,
const char *  tag,
size_t  len 
)

从输入流读数据直至读到所要求的字符串或出错才返回

参数
buf{void*} 用户缓冲区
inout{size_t*} 作为参数时 *inout 表示缓冲 buf 的空间大小,函数返回后记录存储于 buf 中的数据长度
tag{const char*} 要求读到的字符串
len{size_t} tag 字符串的长度
返回
{bool} 是否读到所要求的字符串数据

◆ readtags() [2/3]

bool acl::istream::readtags ( string s,
const string tag 
)

从输入流中读数据直到读到要求的字符串数据作为分隔符的数据, 读取的数据的最后部分应该是该字符串

参数
s{string&} 缓冲区,内部会首先自动清空该缓冲区
tag{const string&} 要求读的字符串数据
返回
{bool} 是否读到要求的字符串数据

◆ readtags() [3/3]

bool acl::istream::readtags ( string s,
const string tag 
)

◆ ugetch()

int acl::istream::ugetch ( int  ch)

向输入流中放加一个字节的数据

参数
ch{int} 一个字符的 ASCII 码值
返回
{int} 如果返回值与 ch 值相同则表示正确,否则表示出错

该类的文档由以下文件生成: