zoukankan      html  css  js  c++  java
  • 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保存 二进制 的例子。

  • 相关阅读:
    vue+sass 下sass不能运行问题
    Servlet3.0的新特性
    Servlet监听器
    Servlet过滤器
    会话跟踪
    Servlet的应用
    Servlet概述
    《南怀瑾讲述99个人生道理》——刘清海编著
    Web应用程序简介
    JDBC学习总结(五)
  • 原文地址:https://www.cnblogs.com/ayanmw/p/2663881.html
Copyright © 2011-2022 走看看