草庐IT

IOStreams

全部标签

c++ - 如何使用 boost::iostreams 更改缓冲区大小?

我的程序并行读取几十个非常大的文件,一次只读一行。似乎主要的性能瓶颈是HDD从一个文件到另一个文件的寻道时间(虽然我不完全确定如何验证这一点),所以我认为如果我可以缓冲输入会更快。我正在使用这样的C++代码通过boost::iostreams“过滤流”读取我的文件:input=newfiltering_istream;input->push(gzip_decompressor());file_sourcein(fname);input->push(in);根据documentation,file_source没有任何方法来设置缓冲区大小,但filtering_stream::push似

c++ - boost iostreams 可以即时读取和压缩 gzip 文件吗?

我正在使用boostiostreams读取gzip文件:以下工作正常:namespaceio=boost::iostreams;io::filtering_istreamin;in.push(boost::iostreams::basic_gzip_decompressor());in.push(io::file_source("test.gz"));stringstreamss;copy(in,ss);但是,我不想占用内存来读取整个gzip文件进入内存。我希望能够增量读取文件。例如,如果我有一个从istream初始化自身的数据结构X,Xx;x.read(in);失败。大概这是因为我们

c++ - iostreams - 打印 `wchar_t` 或 `charXX_t` 值作为字符

如果你输入wchar_t,char16_t,或char32_tvalue到一个窄的ostream,它将打印代码点的数值。#includeusingstd::cout;intmain(){cout打印x120120120.这是因为有一个operator对于basic_ostream的具体组合及其charT,但其他字符类型没有类似的运算符,因此它们会自动转换为int并以这种方式打印。同样,非窄字符串文字(L"x"、u"x"、U"X")将被静默转换为void*并打印为指针值,非窄字符串对象(wstring、u16string、u32string)甚至无法编译。所以,问题是:打印wchar_t

c++ - 你能告诉 iostreams 哪些字符被视为空白吗?

这样你就可以做这样的事情,例如:std::stringa("01:22:42.18");std::stringstreamss(a);inth,m,s,f;ss>>h>>m>>s>>f;通常需要将字符串格式化为"01224218"。您可以直接修改当前语言环境来执行此操作吗? 最佳答案 我不认为您可以在不创建新语言环境的情况下更改默认定界符,但这看起来很老套。您可以使用的是使用getline使用指定分隔符的第三个参数,或者您可以读取分隔符而不对它们执行任何操作(例如ss>>h>>d>>m>>d>>s>>d>>f)。您还可以编写自己的解

c++ - iostreams中如何处理浮点溢出

我有一些非常简单的代码:#include#includeusingnamespacestd;intmain(){stringstreamis("1.02.01e-5001e50012.0");doubled={17.0,17.0,17.0,17.0,17.0};for(inti=0;i>d[i]){cout当我用g++4.1.2编译这段代码并在Redhat5.10(相同的编译器)上运行它时,我得到了输出:ConversionsucceededConversionsucceededConversionfailedConversionfailedConversionsucceeded120

c++ - boost::iostream zlib 将多个文件压缩到一个存档中

我无法将一堆文件打包到一个存档中。boost文档在这个主题上非常有限,我已经在网上搜索了几个小时,但我找不到解决方案。到目前为止我有什么:boost::filesystem::ofstreamofsArchive("some.zip");boost::iostreams::filtering_ostreambufoutFilter;boost::iostreams::zlib_paramszparam(boost::iostreams::zlib::default_compression);try{//setupthefilteroutFilter.strict_sync();outF

c++ - boost gzip 解压缩字节数组

我实现了文件的gzip/zlib解压缩,如他们在boost站点上的示例所示。voidCompressionUtils::Inflate(std::ifstream&inputFile,std::ofstream&outputFile){boost::iostreams::filtering_streambufin;in.push(boost::iostreams::gzip_decompressor());in.push(inputFile);boost::iostreams::copy(in,outputFile);}这很好用。我还从套接字中读取数据,该套接字是从也被压缩的基于休息的

c++ - 为现有缓冲区提供 std::istream 接口(interface)而不复制它

我有一个固定长度的字符缓冲区,我想将它提供给一个接受std::istream&的函数。如何在不复制缓冲区的情况下做到这一点?如果这意味着派生自定义streambuf,我想我会接受拷贝。我只是想知道我是否遗漏了一些直截了当的东西。这是我现在正在做的事情(执行不需要的拷贝):voidloadFromBuffer(constchar*buff,size_tlen){std::istringstreamis(std::string(buff,len));//BUFFERCOPIEDHERE:(load(is);}编辑:作为记录,这是使用boost.Iostreams的直接解决方案:#inclu

c++ - 写入大文件

我尝试写入一个大文件,但它似乎不适用于大于2GB的文件。我试过使用boost::iostreams::file_sink。这只是提升流的限制吗?有没有其他方法可以在Win64和win32上写入大文件? 最佳答案 这取决于:您正在使用的文件系统。FAT等旧文件系统只允许最大2GB的文件。使用NTFS。您的库必须编译为允许大文件(64位寻道偏移量)。如果他们使用32位整数在文件中查找(检查调用“查找”和“告诉”的参数和结果),您只能访问2GB(2^31位,第32位是符​​号+/-)这也可能有帮助:http://www.boost.org

C++ "hello world"Boost tee 示例程序

BoostC++库有FunctionTemplateteeTheclasstemplatestee_filterandtee_deviceprovidetwowaystosplitanoutputsequencesothatalldataisdirectedsimultaneouslytotwodifferentlocations.我正在寻找一个完整的C++示例,它使用Boosttee输出到标准输出和类似“sample.txt”的文件。 最佳答案 基于约翰链接的问题的帮助:#include#include#include#inclu