leveldb调用get时,string把value截断。解决方案

用leveldb的get接口如下:

virtual Status Get(const ReadOptions& options, const Slice& key,std::string* value) = 0;


以上标红的部分会将存入到leveldb中的字符串截断,如果存入的是(str = “123\0456”)

则调用get接口只能得到value = 123.


因此可以通过如下方式进行解决:(放弃使用get接口,使用迭代器)

/*get content*/
    Iterator* iter_content = db->NewIterator(ReadOptions());
    iter_content->Seek(Slice(strDetailKey));
*len = iter_content->value().size();
if (0 == *len)
{
    ldout(cct, 5) << "###############################" << iter_content->value().size() << dendl;
        return E_GET_FAILED;
}
memcpy(content, iter_content->value().data(), *len);



如果在leveldb的put时,出现这个问题,可以放弃使用 Slice() : data_(""), size_(0) { }。改成使用:

  // Create a slice that refers to d[0,n-1].
  Slice(const char* d, size_t n) : data_(d), size_(n) { }

这样就成功解决了put,get的问题


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值