Blob 提供了一种容纳任何不透明数据的方法。它以“二进制大对象”一词命名,该词通常用于描述存储在数据库中的非结构化数据(例如编码的图像)。虽然 Blob 的功能非常简单(存储与分配数据相关的指针和大小),但 Blob 类提供了一些非常有用的功能。特别是,它与 Image 类一样完全引用计数。
Blob 类支持值分配,同时保留对象的任何未完成的早期版本。由于分配是通过内部的指针进行的,因此 Blob 足够高效,可以直接存储在 STL 容器或任何其他需要分配的数据结构中。特别是,通过将 Blob 存储在关联容器(如 STL 的'map')中,可以创建简单的索引内存中“数据库”的 Blob。
Magick++ 目前使用 Blob 来包含编码的图像(例如 JPEG)以及 ICC 和 IPTC 配置文件。由于 Blob 是一个通用类,因此它也可以用于其他目的。
Blob 提供的方法显示在下表中
Blob 方法
方法 |
返回类型 |
签名 |
描述 |
void |
默认构造函数 |
||
const void* data_, size_t length_ |
使用数据构造对象,复制提供的数据 |
||
const Blob& blob_ |
复制构造函数(引用计数) |
||
Blob |
const Blob& blob_ |
赋值运算符(引用计数) |
|
void |
const std::string base64_ |
从 Base64 编码的字符串表示更新对象内容。 |
|
std::string |
void |
返回 Base64 编码的字符串表示。 |
|
const void* |
void |
获取数据指针。用户绝不应该尝试修改或释放此数据,因为 Blob 类管理自己的数据。在允许 Blob 被销毁之前,用户必须完成对数据的操作,因为 Blob 被销毁后指针将失效。 |
|
size_t |
void |
获取数据长度。 |
|
void |
const void* data_, size_t length_ |
更新对象内容,复制提供的数据。对象中的任何现有数据都将被释放。 |
|
void |
void* data_, size_t length_, Blob::Allocator allocator_ = Blob::NewAllocator |
更新对象内容,直接使用提供的指针(不复制)对象中的任何现有数据都将被释放。用户必须确保提供的指针在提供给此方法后不会被删除或以其他方式修改。可选的 allocator_ 参数允许用户指定使用 C(MallocAllocator)还是 C++(NewAllocator)内存分配系统来分配内存。默认情况下使用 C++ 内存分配器。 |