我正在编写一对multichar过滤器,它与boost :: iostream :: filtering_stream一起用作数据压缩器和解压缩器.
我从编写压缩器开始,从lz-family中选择了一些算法,现在我正在使用解压缩器.
有几个词,我的压缩器将数据分成数据包,这些数据包是单独编码的,然后刷新到我的文件中.
当我必须从我的文件中恢复数据时(在编程方面,接收一个read(byte_count)请求),我必须读取一个完整的压缩块,缓冲它,解压缩它,然后只给出所需的字节数.我已经实现了这个逻辑,但是现在我正在努力解决以下问题:
打包我的数据时,输出文件中可以显示任何符号.我在阅读文件时遇到麻烦,该文件包含使用boost :: iostreams :: read(….,size)的符号(hex 1A,char 26).
例如,如果我使用std :: ifstream,我会设置一个std :: ios :: binary模式,然后可以简单地读取这个符号.
在实现使用boost :: iostream :: read例程读取char序列的boost :: iostream过滤器时,是否有任何方法可以实现相同的目的?
一些代码在这里:
// Compression // ----------- filtering_ostream out; out.push(my_compressor()); out.push(file_sink("file.out")); // Compress the 'file.in' to 'file.out' std::ifstream stream("file.in"); out << stream.rdbuf(); // Decompression // ------------- filtering_istream in; in.push(my_decompressor()); in.push(file_source("file.out")); std::string res; while (in) { std::string t; // My decompressor wants to retrIEve the full block from input (say,4096 bytes) // but instead retrIEves 150 bytes because meets '1A' char in the char sequence // That obvIoUsly happens because file should be read as a binary one,but // how do I state that? std::getline(in,t); // <--------- The error happens here res += t; }解决方法 读取文件为二进制文件的简答:
打开文件流时指定ios_base :: binary.
MSDN Link
总结以上是内存溢出为你收集整理的c – 如何使boost :: iostream以与std :: ios :: binary相当的模式运行?全部内容,希望文章能够帮你解决c – 如何使boost :: iostream以与std :: ios :: binary相当的模式运行?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)