c – 如何找出std :: istream中可用的字节数?
发布时间:2020-12-16 04:55:46 所属栏目:百科 来源:网络整理
导读:如果我想将std :: istream的内容读取()到缓冲区,我必须首先知道有多少数据可用来知道缓冲区的大小.为了从istream获取可用字节数,我目前正在做这样的事情: std::streamsize available( std::istream is ){ std::streampos pos = is.tellg(); is.seekg( 0,std
如果我想将std :: istream的内容读取()到缓冲区,我必须首先知道有多少数据可用来知道缓冲区的大小.为了从istream获取可用字节数,我目前正在做这样的事情:
std::streamsize available( std::istream &is ) { std::streampos pos = is.tellg(); is.seekg( 0,std::ios::end ); std::streamsize len = is.tellg() - pos; is.seekg( pos ); return len; } 同样地,因为std :: istream :: eof()不是一个非常有用的基金AFAICT,为了找出istream的get指针是否在流的末尾,我这样做: bool at_eof( std::istream &is ) { return available( is ) == 0; } 我的问题: 有没有更好的方法从istream获取可用字节数?如果不是在标准库中,也许在boost中? 解决方法
对于std :: cin,您不需要担心缓冲,因为它已经缓冲了 – 而且您无法预测用户笔划的密钥数量.
对于打开的二进制std :: ifstream,它们也是缓冲的,你可以调用seekg(0,std :: ios:end)和tellg()方法来确定那里有多少字节. 您还可以在阅读后调用gcount()方法: char buffer[SIZE]; while (in.read(buffer,SIZE)) { std::streamsize num = in.gcount(); // call your API with num bytes in buffer } 对于通过std :: getline(inputstream,a_string)读取文本输入并在之后分析该字符串可能很有用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |