1

之前可能已经问过类似的问题,我找不到我的问题的确切答案,所以决定在这里问。我正在使用一个 3rd 方框架,该框架定义了自己的类来处理图像文件。它只接受文件名,整个实现围绕着能够打开这些文件流并执行读/写。我想输入一个图像缓冲区(我通过对之前打开的图像进行一些预处理获得)并将其提供给这个框架。问题是我无法向它提供缓冲区,只能提供文件名字符串。

我正在寻找将我的缓冲区转换为文件流的最佳方法,以便它可以被框架查找和摄取。请帮我弄清楚我应该看什么。我尝试阅读有关 streambuf(filebuf 和 stringbuf)的信息并尝试将缓冲区分配给这些类型,但到目前为止没有成功。

4

1 回答 1

1

如果框架只接受一个文件名,那么你必须给它一个文件名。这意味着数据必须驻留在文件系统中。

可移植的答案是“将您的数据写入临时文件并传递该文件的名称”。

在 Unix 上,您可能能够使用命名管道并派生另一个线程通过管道提供数据......

但老实说,您最好只使用临时文件。如果您设法以足够快的速度打开、读取和删除该文件,它很可能永远无法将其写入磁盘,因为内核会缓存数据。

而且,如果您能够使用 ramdisk (tmpfs),则可以保证一切都发生在内存中。

[编辑]

又一想。如果您可以修改您的代码库以std::iostream代替std::fstream,则可以将其传递给std::stringstream. 它们支持内存缓冲区上的所有常规iostream操作,包括诸如查找之类的操作。

于 2011-06-21T05:29:06.660 回答