代码之家  ›  专栏  ›  技术社区  ›  Arkaitz Jimenez

从istream到ostream的快速受控拷贝

  •  15
  • Arkaitz Jimenez  · 技术社区  · 15 年前

    istream 给一个 ostream

    myostream << myistream.rdbuf();
    

    copy( istreambuf_iterator<char>(myistream),
          istreambuf_iterator<char>(),
          ostreambuf_iterator<char>(myostream)
    );
    

    我发现了 rdbuf 版本至少是 copy .
    我还没有找到复制的方法,比如说100字节,但是由于要复制的大小可能会很大,我希望能够使用 rdbuf公司 如果可以的话,改版。

    1 回复  |  直到 8 年前
        1
  •  11
  •   Benjamin Lindley    15 年前

    你能用0x吗?如果是,则可以使用copy:

    copy_n( istreambuf_iterator<char>(myistream),
            100,
            ostreambuf_iterator<char>(myostream)
    );
    

    编辑1:

    void stream_copy_n(std::istream & in, std::size_t count, std::ostream & out)
    {
        const std::size_t buffer_size = 4096;
        char buffer[buffer_size];
        while(count > buffer_size)
        {
            in.read(buffer, buffer_size);
            out.write(buffer, buffer_size);
            count -= buffer_size;
        }
    
        in.read(buffer, count);
        out.write(buffer, count);
    }