代码之家  ›  专栏  ›  技术社区  ›  user180326

用于C++的便携式字节流接口

  •  3
  • user180326  · 技术社区  · 14 年前

    我在工作 open source portable C++ image compression library . 目前,我的API通过使用图像数据交换指向字节数组的指针来工作。我想支持某种流模式以获得更好的性能和内存消耗。

    为此,我想知道是否有一个接口或抽象基类(C++标准库的一部分),我可以用它作为输入字节流的接口,类似于Java的输入流,或者是C流。可以这么简单:

     class inputstream 
     {
          public:
          virtual void readbytes(char*, size_t count) = 0;
     };
    

    我自己也可以定义这样的接口,但随后我要求每个人实现某种适配器到我的代码的接口,以及我的IO错误处理风格,我希望避免这种情况。

    理想情况下,该接口或基类将已经由一些现有的C++标准库实现,用于读取文件。如果它不是一个基类,那么它应该是完全抽象的,这样我的用户就可以连接到他们拥有的任何字节流(平台特定的、套接字的,等等)。我在iostream浏览了一下,但没有找到符合要求的东西。它应该尽可能轻:应该定义错误处理,但是不需要寻找流。

    如果没有这样的事情(我担心),是否存在类似于现有最佳实践的事情?就像一个带有标准签名的函数指针,以及用于错误处理的契约?如果有创造性的解决方案也能在C中工作,我也感兴趣。

    编辑:关键是基类的read()方法是虚拟的。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Ben Voigt    14 年前

    std::istream

    istream std::streambuf

    streambuf ostream

    stringbuf filebuf

        2
  •  0
  •   Jay    14 年前

        3
  •  0
  •   rubenvb    14 年前

    std::ifstream

    #include <fstream>
        using std::ifstream;
    
    int main()
    {
        ifstream stream;
        stream.open("example.jpg", ifstream::binary ); // open raw binary stream
        if( !stream ) // check if stream is ready to be read
            throw runtime_error( "Failed to open file..." );
    
        char byteBuffer;
    
        while( stream >> byteBuffer ) // read all bytes until read/extraction fails
        {
            // do something with the byte
        }
        stream.close();
    
        return 0;
    }
    

    char wchar_t

        4
  •  0
  •   Goz    14 年前