【问题标题】:Why does the leveldb DB::Get API use std::string as value type?为什么 leveldb DB::Get API 使用 std::string 作为值类型?
【发布时间】:2013-01-08 12:24:15
【问题描述】:

我想在 leveldb 中存储 key(url) 和 value(jpg 图像)。据说,

键和值是任意字节数组。

如何使用 DB::Get API?

【问题讨论】:

    标签: binary leveldb


    【解决方案1】:

    Slice 不拥有内存(只是指向它),因此返回 Slice 意味着调用者应该释放内存。

    所以需要一个具有值语义的类型。

    二进制数组的自然值是std::vector<uint8_t>,正如它所暗示的那样。但是std::string 也可以代替使用(正如您在回答中指出的那样),如果您希望读取真正的字符串(不需要强制转换),它会更有用。

    不过,主要问题是原因没有记录在案。

    【讨论】:

      【解决方案2】:

      我终于明白了! c++ std::string 使用 size() 方法获取数据长度,使用 .data() 获取数据值。 c++ std::string 不是由'\0'终止,而是由size()函数指定!

      【讨论】:

      • 其实底层数据保证会被'\0'终止;)
      【解决方案3】:

      或者,如果您使用迭代器,您可以直接从返回切片的iter->Value() 函数中提取数据。这样可以避免复制到中间字符串中。

      【讨论】:

        猜你喜欢
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 2019-04-26
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 1970-01-01
        • 2019-06-28
        相关资源
        最近更新 更多