
我正在编写一个带有NDK C组件的Android项目,并且有一个需要大量解析的文件. NDK只允许我获取一个指向我正在处理的文件的file *指针,而不是一个ifstream,它有一些与之相关的便利功能.无论如何将file *(cstdio)转换为ifstream(iostream)?
解决方法:
通常,您不能将file *转换为std :: ifstream.但是,这无论如何都不是必需的:创建一个可用于初始化std :: istream的自定义流缓冲区是合理的.使用std :: istream应该足够了,因为std :: ifstream提供的额外功能无论如何都不能真正帮助解析.只要您不需要使用搜索,创建用于从file *读取的流缓冲区就非常简单.所需要的只是覆盖std :: streambuf :: underflow()函数:
class stdiobuf : std::streambuf{private: file* d_file; char d_buffer[8192];public: stdiobuf(file* file): d_file(file) {} ~stdiobuf() { if (this->d_file) fclose(this->d_file); } int underflow() { if (this->gptr() == this->egptr() && this->d_file) { size_t size = fread(this->d_file, 8192); this->setg(this->d_buffer, this->d_buffer, this->d_buffer + size); } return this->gptr() == this->egptr() ? traits_type::eof() : traits_type::to_int_type(*this->gptr()); }};剩下的就是初始化std :: istream以使用stdiobuf:
stdiobuf sbuf(fopen(...));std::istream in(&sbuf);我只输入上面的代码,目前我无法尝试.然而,基本应该是正确的,虽然可能有类型,甚至可能有一点缺陷.
总结以上是内存溢出为你收集整理的将FILE *转换为ifstream C,Android NDK全部内容,希望文章能够帮你解决将FILE *转换为ifstream C,Android NDK所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)