• C++ leveldb Slice的数据类型 不一定 必须是字符串。也可以是二进制


    先列出来参考 资料:

    看这篇翻译:http://duanple.blog.163.com/blog/static/70971767201171705113636/

    Leveldb源码分析4 Slice:http://www.kuqin.com/database/20110919/265041.html

    Slice.h源码:http://www.oschina.net/code/explore/leveldb/include/leveldb/slice.h

    1 相比返回string,返回Slice的开销会小的多(没有拷贝,Slice中没有实际数据,只有指向数据的指针,开销低)。 
    2 leveldb允许key和value包含'\0',不能返回以null结尾的c风格字符串。 

    对于上面两点,第二点 可以包括\0?? 这就奇怪了,字符串就是根据\0判断的。那么 如果二进制的话,就有太多的\0了。

    于是 看到源码分析关于 Slice的构造函数中

      // Create an empty slice.
      Slice() : data_(""), size_(0) { }
     
      // Create a slice that refers to data[0,n-1].
      Slice(const char* data, size_t n) : data_(data), size_(n) { }
     
      // Create a slice that refers to the contents of "s"
      Slice(const std::string& s) : data_(s.data()), size_(s.size()) { }
     
      // Create a slice that refers to s[0,strlen(s)-1]
      Slice(const char* s) : data_(s), size_(strlen(s)) { }

    第二个 可以指定 一个 n,和一个char * 。

    我们的二进制 一般就是 char * 类型的,只要可以指定n,那么 其实就可以将二进制 放入 Slice中,也就可以放入 leveldb中了。

    或许 我应该尽快 写一个例子 来验证一切。。。。。。

    TODO:leveldb 通过Slice保存 二进制 的例子。

  • 相关阅读:
    随机数
    ASP .NET下的301重定向如何做
    网站外部链接建设方案
    解析ASP.NET WebForm和Mvc开发的区别
    委托、匿名委托和lambda表达式
    图片垂直居中
    jquery函数写法
    [转]函数方法常用的动词
    CSS Hack
    富文本编辑器
  • 原文地址:https://www.cnblogs.com/ayanmw/p/2663881.html
Copyright © 2020-2023  润新知