之前可能会问过与此相似的事情,我无法找到问题的确切答案,决定在这里问一下。 我正在使用第三方框架,它有自己定义的类来处理图像文件。它只接受文件名,整个实现围绕能够打开这些文件流并执行读/写。 我想输入一个图像缓冲区(我通过之前打开的图像上的一些预处理获得)并将其提供给此框架。问题是我无法向其提供缓冲区,只有文件名字符串。
我正在寻找将缓冲区转换为文件流的最佳方法,以便它可以被搜索并被框架摄取。请帮我弄清楚我应该看什么。 我尝试阅读streambuf(filebuf和stringbuf)并尝试将缓冲区分配给这些类型,但到目前为止没有成功。
答案 0 :(得分:1)
如果框架只采用文件名,则必须为其传递文件名。这意味着数据必须驻留在文件系统中。
便携式答案是“将您的数据写入临时文件并传递其名称”。
在Unix上,您可以使用命名管道并分叉另一个线程来通过管道提供数据......
但老实说,你最好只使用一个临时文件。如果你设法足够快地打开,读取和删除文件,那么它很可能永远不会出现在磁盘上,因为内核会缓存数据。
如果你能够使用ramdisk(tmpfs),你可以保证一切都在内存中发生。
[编辑]
还有一个想法。如果您可以修改代码库以便在std::iostream
而非std::fstream
上运行,则可以将其传递给std::stringstream
。它们支持内存缓冲区上的所有常规iostream
操作,包括搜索等内容。