c - 从 sqlite db 获取 blob,无需 memcpy

标签 c sqlite memcpy

有什么方法可以从列中取出 blob 并将其所有权传递给其他人吗?当我从 sqlite3 表获取 blob(或其他类型的数据)时,我想避免额外的分配和 memcpy。

根据文档:

The pointers returned are valid until a type conversion occurs as described above, or until sqlite3_step() or sqlite3_reset() or sqlite3_finalize() is called. The memory space used to hold strings and BLOBs is freed automatically. Do not pass the pointers returned from sqlite3_column_blob(), sqlite3_column_text(), etc. into sqlite3_free().

例如: 我将位图对象作为 blob 存储在 sqlite 数据库中。当我在这个位图上有一个名为 setPixels 的方法时,它将指针的所有权传递给该位图。在当前的解决方案中,我为每个位图分配内存两次。一次是用 sqlite 从数据库中取出它时,第二次是在将新指针传递给位图时。

最佳答案

sqlite3_column_blob返回的缓冲区是内部的;没有机制可以改变其所有权。

如果您的 blob 确实太大以至于缓冲区管理对性能产生影响,您可以 Open A BLOB For Incremental I/ORead Data From A BLOB Incrementally .

关于c - 从 sqlite db 获取 blob,无需 memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780782/

相关文章:

c - 不使用互斥锁保护双变量

c - PEM_read_RSAPrivateKey 函数返回 NULL

android - 来自 SQLite 查询的 CursorIndexOutOfBoundsException

c - 如果我们使用 memcpy 将更多数据从源复制到目标,会发生什么?

您可以将 struct 指针转换为 char 指针吗?

ios - HTML5 视频播放时 CALayerInvalidGeometry 异常

sqlite:添加新列后如何用值填充新列?

sqlite 搜索多列

c++ - 无法正确 memcpy 一个 char 数组来构造

c - 交换 C 变量